본문 바로가기
리눅스

리눅스2 3차시

by IT매니절 2024. 4. 13.

아파치 웹서버 설정 파일 분석 (/etc/httpd/conf/httpd.conf)

/etc/httpd/                                <- 최상위 디렉터리
├── conf/                               <- 설정파일
│   ├── httpd.conf                  <- 메인설정파일
│   └── magic
├── conf.d/                             <- 설정파일 보조 디렉터리
├── README
├── autoindex.conf 
├── php.conf                          <- php 설정 파일  
├── userdir.conf
│   └── welcome.conf
├── conf.modules.d/              <- 모듈 디렉터리
├── 00-base.conf
│   ├── 00-dav.conf
│   ├── 00-lua.conf
│   ├── 00-mpm.conf
│   ├── 00-proxy.conf
│   ├── 00-systemd.conf
│   ├── 01-cgi.conf
│   └── 10-php.conf
├── logs -> ../../var/log/httpd/                                 <- 웹서버 로그 디렉터리. 심볼릭링크.
├── modules -> ../../usr/lib64/httpd/modules/        <- 동적모듈 디렉터리. 심볼릭링크
└── run -> /run/httpd/

- 아파치 웹서버에 #으로 된 것은 주석

 

지시어 : 서버를 실행시킬 때 참조하는 변수. 수정가능한 값. 수정하면 서버의 동작상태가 변경됨
형식 ex)

디렉토리 컨테이너


1. <Directory 값>                                        # (Directory 컨테이너 안에 있는 형식)
 지시어 값
</Directory>

(MariaDB 지시어 ex) 지시어(변수)=값

 PHP 지시어        ex) 지시어 = 값)

 

IfModeule 컨테이너


2. <IfModule dir_module>                           # (IfModeule 컨테이너 안에 있는 형식)
=> dir_module이 있다면 지시어 값(DirecortyIndex index.html)을 실행한다.

 

3. DocumentRoot "/var/www/html"              # (단독으로 지시어만 있는 형식)
=> 아파치 웹서버 웹문서의 최상위 루트 지정

 

{} 중괄호로 중복된 영역 + 다른 부분만 묶어 생략할 수 있다

 

예전
- 모든 설정을 httpd.conf에 포함
현재
- 파일마다 독립적으로 저장되어 있고 httpd.conf에서 include로 불러들여서 사용

 

섹션1: 전체 환경 설정
섹션2: 주 서버 설정
섹션3: 가상 호스트

 

ServerRoot "/etc/httpd"

=> 웹서버의 루트 디렉토리 설정 (수정 금지)

 

Listen 80

=> 수신할 IP주소와 포트번호설정. 현재 80번 포트만 설정되어 모든 IP주소의 80번포트를 의미

(ex Listen 10.10.10.10:80)

 

Include conf.modules.d/*.conf

=> 외부에 파일을 만들어 불러들이는 방식

파일의 경로가 상대경로이면 서버루트ServerRoot인 /etc/httpd/ 경로가 앞에 자동으로 붙는다

( 전체 주소 : /etc/httpd/conf.modules.d/*.conf

해당 폴더 안에 들어가보면 총 8개의 설정파일이 있는 것을 볼 수 있다

wc -l *               => 현재 폴더 파일들의 라인수를 세어준다. * 위치에 폴더경로를 기재한다.)

 

/etc/httpd/conf.modules.d/00-base.conf의 내용

ex) LoadModule vhost_alias_module modules/mod_vhost_alias.so    # ServerRoot /etc/httpd/가 생략된 상대주소

      LoadModule <모듈명> <모듈경로>

=> LoadModule : 로드할 모듈을 지정한다. 동적 라이브러리를 생성해서 동적 모듈로 실행파일에 붙여서 기능 실행

 

modules/mod_vhost_alias.so

=> /etc/httpd/modules/mod_vhost_alias.so

그런데, 

lrwxrwxrwx. 1 root root  29  4월  6 10:51 modules -> ../../usr/lib64/httpd/modules

/etc/httpd/modules/ 는 /usr/lib64/httpd/modules에 심볼릭링크된 폴더이다

즉, 실제 모듈의 위치는

/usr/lib64/httpd/modules/mod_vhost_alias.so 가 된다.

 

* httpd.conf 파일의 Listen 지시어가 수정되면 systemctl restart httpd.service (= apachectl restart )

centos7 기준으로 reload로는 status가 Active: failed 떨어져 있다.

( centos7에서 reload 미동작 참고 : https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_install&wr_id=115651 )

단, Listen이 아니라 DocumentRoot를 수정했을 때는 reload가 잘 동작함.

다른 지시어에 대해서는 확인이 필요할듯 한데, 그냥 restart 쓰는게 나을 거 같다.
(httpd -h 해보면 [-k start|restart|graceful|graceful-stop|stop] 이렇게 나옴 reload가 없다. 없어도 일부 설정에 대해서는 동작하는 것 같지만, 일단 공식적으로는 없음)

 

httpd -M 결과 모듈리스트 일부

 

httpd에 고정된static 모듈은 core, so, http 이다. 컴파일 속도가 빠르지만 수정될 경우 아파치 재컴파일이 필요함(보안이슈로 인한 수정/패치/버전 업그레이드가 어려워서 최근 잘 사용하지 않는다. 소스코드 컴파일 난이도가 어렵다.)

나머지는 shared공유 모듈(DSO 방식-동적 모듈적재 방식 ex) yum 설치)이다. 아파치를 한 번만 컴파일하고 모듈이 추가되어도 컴파일해둔 아파치를 계속 사용한다.

(소스코드 컴파일 자체는 static, DSO 방식 둘 다 가능)

 

core_moldule

- 아파치 웹 서버의 기본 기능 제공

- 서버의 중요 기능인 요청 처리, 응답 생성, 접근 제어, 로깅 및 핵심 기능

 

so_moldule

- 다른 모듈을 동적으로 로드하기 위해 필요한 모듈

- DSO 컴파일을 해도 so_module은 무조건 static

- 필요할 때만 로드하여 메모리를 절약하고 불필요한 리소스 낭비를 막음

 

http_moldule

- 핵심 HTTP 프로토콜 처리 담당

- HTTP 요청을 받아들이고 처리하고 응답 생성

 

실습) 메모리에서 모듈 제거해보기

① vhost 가상 호스트 모듈

httpd -M | grep vhost_alias
vhost_alias_module (shared)

vi /etc/httpd/conf.modules.d/00-base.conf 에서

#LoadModule vhost_alias_module modules/mod_vhost_alias.so 해당 모듈을 주석처리하고

웹서버를 다시 동작하면 httpd -M | grep vhost_alias 실행시 vhost 모듈이 사라져있다.

 

② cgi_module

vi /etc/httpd/conf.modules.d/01-cgi.conf

#<IfModule mpm_prefork_module>
#   LoadModule cgi_module modules/mod_cgi.so
#</IfModule>

httpd -M | grep ' cgi_module'

역시 주석처리후 웹서버를 재기동하면 모듈이 사라져있다

 

(검색

grep cgi /etc/httpd/conf.modules.d/00-base.conf

grep cgi /etc/httpd/conf.modules.d/01-cgi.conf

grep을 이용해 키워드로 파일 내용을 검색하여 주석처리 할 수 있다)

 

 

실습) vhost 가상 호스트 모듈 사용

가상호스트Virtual Host

- 아파치 웹서버에 여러 대의 도메인을 운영하는 기술.
- 일반적으로 일반유저를 생성해서 사용함

- /etc/httpd/conf.d/가상호스트파일명.conf 을 생성하여 IncludeOptional 기능으로 불러들이도록 한다

( 차이점

IncludeOptional : 지정된 경로에 있는 모든 파일을 불러들임 (단, Include와 달리 파일이 존재하지 않아도 에러가 없음))

- 도메인/IP 기반 가상호스트로 나뉘는데, 실습에서는 도메인 기반 가상호스트로 진행

 

httpd -t: 설정파일을 체크하는 옵션
httpd -S: 현재 설정된 가상호스트를 확인하는 옵션
httpd -h: httpd(아파치 웹서버 실행파일, 아파치 웹서버 데몬) 도움말

 

가상호스트 설정: (ex /etc/httpd/conf.d/vhost_alias_module.conf)
<VirtualHost *:80>
    ServerAdmin   관리자 이메일 주소 (생략 가능)
    DocumentRoot  웹페이지가 제공되는 경로 (생략 불가)
    ServerName    도메인 주소 (생략 불가)
    ServerAlias   서브 도메인 주소 (생략 가능)
    ErrorLog      웹페이지 접근 시에 에러 로그가 기록되는 경로 (생략 가능)
    CustomLog     웹페이지 접근 시에 정상 로그가 기록되는 경로 (생략 가능)
</VirtualHost>

 

예시

<VirtualHost *:80>
    ServerAdmin   webmaster@sbs.com
    DocumentRoot  /home/sbsuser/public_html
    ServerName    sbs.com
    ServerAlias   http://www.sbs.com
</VirtualHost>

 

=> /etc/hosts에 가짜도메인 www.sbs.com ( echo "192.168.100.3 sbs.com www.sbs.com" >> /etc/hosts) 설정

=> DocumentRoot로 잡아준 /home/sbsuser/public_html 폴더는 chcon -t httpd_sys_content_t /home/sbsuser/public_html 명령어로 httpd_sys_content_t ( SELinux 보안 문맥 )를 설정해주어야 한다( ls -lZd 로 확인 가능). 그리고 관리자가 접근할 수 있어야 해서, chmod 705 /home/sbsuser 명령어로 디렉터리 권한을 수정한다. index.html은 사용자에 맞게 소유자, 그룹을 설정.

 

lynx --dump sbs.com

=> lynx로 가상호스트를 테스트한다.

 

 

서브넷마스크의 역할
=> 네트워크 주소와 호스트 주소를 구분하는 역할.

ip주소가 192.168.100.3일 때,
192.168.100.0은 네트워크 대역을 의미하고, 192.168.100.255는 브로드캐스트 주소를 의미한다.
때문에 실제로 사용하는 영역은 192.168.100.1 ~ 192.168.100.254 까지이다.
서브넷마스크 prefix길이 24일 때 ( ex 192.168.100.3/24 )

192. 168. 100. 0
11111111. 11111111. 11111111. 00000000


192.168.100(1은 네트워크 주소, 0은 호스트 주소 이므로 1이 24개 이다) 대역을 의미

 

실습을 위해 ip address를 임시적으로(부팅시 사라짐) 추가하기

명령어 : ip addr add 192.168.100.4/24 dev ens10 (간략히 : ip a a 192.168.100.4/24 dev ens10 )

삭제 명령어 : ip a d 192.168.100.4/24 dev ens10

( ifconfig는 모든 ip 대역 정보를 보여주지 못해서 현재는 ip a를 사용함 )

 

(vi 단축어

:.,$s/^/#

=> 현재 라인부터 끝까지 첫 문자열 앞에 #을 넣어서 주석처리한다.

원활한 실습을 위해 톰캣 설정들(jsp 연동포함)을 주석처리하였다)

 

yum install lynx

=> 텍스트용 웹 브라우저 설치

사용 : # lynx --dump 192.168.100.30:80

 

User apache
Group apache
=> 관리자 권한 소유자와 소유그룹 (서버 관리자, root와 별개로 지정하여 침해사고 피해의 범위를 좁힌다)

 

 

과제

: 가상호스트 ebeuser, ytnuser 생성해보기

'리눅스' 카테고리의 다른 글

centos7 vmware 고정ip static 설정  (0) 2024.04.15
리눅스2 4차시  (0) 2024.04.14
rocky 리눅스로 싱글모드 패스워드 재설정하기  (0) 2024.04.07
소스 복사 붙여넣기  (0) 2024.04.07
리눅스 수업 2 2차시  (0) 2024.04.07