httpd.conf 설정
아파치에서 중요한 것은 설정 파일을 다루는 것입니다. 설정 파일에서 어느 지시자가 어떤 의미를 가지고 수행되지를 이해하고 적응해야 합니다.
우선 설정 파일은 httpd.conf 파일이다. 이 파일의 경로는 /etc/httpd/conf/httpd.conf 입니다.
vi를 통해 httpd 설정 파일을 엽니다.
지시자(Directives)
ServerRoot
아파치가 설치된 위치를 나타냅니다. 아파치 디렉토리를 옮기는 경우가 아니라면 변경할 필요가 없습니다.
일반적으로 하위 디렉토리 conf와 logs를 포함한다고 합니다.
Listen
특정 IP 또는 특정 Port에서 들어온 요청만 처리하도록 합니다.
기본적으로 80 포트가 적용되어 있습니다.
아래처럼 여러 Listen을 정의할 수 있고, IP와 포트를 동시에 지정할 수 있습니다.
그 외에도 IP 대역을 설정할 수도 있습니다.
Listen 80
Listen 8000
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
Include
아파치는 여러 가지 설정들을 적용할 수 있고, 설정에 따라서 양이 많아질 수 있기 때문에 관리 측면에서 분리하여 .conf 파일들을 불러오는 형태로 사용합니다. 예를 들면 가상 호스트를 설정의 경우가 있습니다.
아파치 버전 2.3.6부터 IncludeOption이 추가 되었습니다. Include는 지정된 파일이 없을 경우 오류가 발생하지만, IncludeOption은 오류가 발생하지 않습니다.
conf/extra 디렉토리에 모든 .conf 파일을 불러오도록하여 분리한 설정들을 가져오도록 설정하였습니다.
LoadModule
.so의 모듈을 로드할 사용하는 지시자입니다.
톰캣 연동을 목적으로 mod_jk 모듈을 불러올 때 사용하게 됩니다.
<IfModule "모듈명"></IfModule>
<>와 </>를 쓰는 형태의 지시자를 컨테이너 지시자라고합니다.
컨테이너 지시자는 안에 다른 지시자들을 가집니다.
LoadModule을 통해 모듈을 로드했지만, 오타와 같은 오류들이 발생해서 만약 로드가 정상적으로 되지 않았다면 서버는 오류와 함께 재시작이 되지 않습니다.
그래서 <IfModue>을 활용해서 모듈이 있다면 안에 명시된 지시자들을 수행합니다.
아파치에서 기본적으로 사용하는 모듈은 Include를 통해서 로드합니다.
아래의 설정은 dir_module이 있다면 DirectoryIndex 지시자를 수행합니다.
DocumentRoot
클라이언트 요청했을 때 웹 서버에서 제일 먼저 응답하는 리소스들이 있는 최상위 경로(/)를 지정하는 지시자입니다.
웹 서버에 접근했을 때 /var/www/html을 접근한다는 것을 알 수 있습니다.
DirectoryIndex
DocumentRoot로 지정된 경로에 접근(클라이언트 요청)했을 때, 보여줄 파일을 지정합니다.
위에서 <IfModule> 지시자에서 봤던 내용에서 index.html 파일이 설정되어 있습니다.
클라이언트가 처음 요청했을 때(/로 접근했을 시) 제일 먼저 보이는 페이지는 index.html이 됩니다.
ServerAdmin
웹 페이지 로딩 중, 문제가 발생했을 시 보여지는 이메일입니다.
ServerName
클라이언트에게 보여주는 호스트 이름입니다. 도메인이나 IP와 포트를 기입합니다.
웹 브라우저에서 구글을 들어가기 위해 google.com 입력하는데, ServerName이 google.com으로 설정되어 구글에 접근할 수 있습니다.
도메인이나 IP 둘 중 하나를 선택해도 되는 이유는
웹 브라우저에서 요청을 하면 바로 서버에 요청이 되지 않고 DNS(Domain Name System)을 거쳐서 웹 브라우저에 입력한 도메인을 Server의 IP와 매핑시킨 후 실제 요청 서버에 요청이 도달하게 됩니다.
웹 서버의 구조는 이 블로그에서 다른 글을 참고하시면 좋을 것 같습니다.
<Directory "디렉토리 경로"></Directory>
지정한 디렉토리에 여러 옵션들을 통해 설정을 할 수 있는 지시자입니다.
<Directory> 지시자에서 사용하는 옵션들을 살펴보겠습니다.
Option 종류
옵션 | 내용 |
None | 모든 옵션을 허용하지 않습니다. |
All | MultiViews를 제외한 모든 옵션설정을 허용합니다. Options 값이 공백일 때도 All과 같습니다. |
Indexes | |