개요


이번 글에서는 Apache의 메인 설정 파일인 httpd.conf의 설정 요소에 대해서 알아보고자 한다.

Apache docs에 따르면 httpd.conf에 설정할수 있는 요소는 수백가지가 있지만 모두 정리할 수는 없으므로 기본적인 요소만 정리하도록 하겠다.

처음 보는 사용자의 이해를 돕기 위해 파일의 위에서 아래쪽 순으로 요소를 정리하였다.

httpd.conf 파일은 #을 주석으로 사용한다.

아래의 경우에는 #이 붙은 /apache 를 무시하고 /home/apache를 ServerRoot로 사용한다.

 

 

 

구성 요소


directive라는 공식 문서의 표현에 맞게 구성 요소를 지시자라고 명명하겠다.

 

ServerRoot

  • Apache 서버가 존재하는 디렉토리를 설정한다.
  • 일반적으로 하위 디렉토리 conf와 logs를 포함한다.
  • 다른 지시자의 상대 경로는 ServerRoot를 기준으로 지정된다.
  • 초기값은 Apache를 컴파일하여 설치할 때 prefix로 지정한 경로이다.

 

Listen

  • Apache와 통신하는 특정한 포트를 설정한다.
  • Listen 지시자가 설정되어있지 않으면 Apache가 시작되지 않는다.

 

LoadModule

  • ${ServerRoot}/modules 디렉토리 안에 있는 모듈을(so 파일)을 읽어들이고, 사용 가능한 모듈 목록에 추가한다.

 

<IfModule>

  • 특정 모듈이 존재하는 경우에만 작동하는 지시자를 설정하기 위해 사용된다.
  • 해당 모듈이 존재하지 않는다면 IfModule 태그 안의 모든 설정 무효화된다.

 

ServerAdmin

  • 서버에서 오류가 발생했을때 클라이언트로 전송하는 오류 메세지에 들어갈 이메일 주소를 설정한다.

 

ServerName

  • 서버가 자신을 식별하기 위해서 사용하는 호스트 이름 및 포트를 설정한다.
  • 등록된 DNS 이름을 가지고 있지 않다면 IP 주소로 설정해야 한다.
  • ServerName을 서버가 확인할 수 없는 IP 주소로 설정하면 Apache 구동 시 경고 메세지를 표시하고, 시스템에서 사용할 수 있는 모든 호스트 이름을 사용한다.

 

DocumentRoot

Apache가 제공하는 웹 어플리케이션 디렉토리를 설정한다.

DocumentRoot 마지막에 슬래시(/)를 지정해서는 안된다.

 

<Directory>

  • 해당 디렉토리 경로 또는 와일드카드, 정규 표현식으로 설정된 디렉토리 또는 파일에 적용되는 옵션을 설정한다.
  • 경로를 "/" 로 설정하면 모든 디렉토리에 적용되는 옵션을 설정한다.

다음은 <Directory> 태그 안에서 설정할 수 있는 지시자들이다.

 

  • Options : 특정 디렉토리에서 사용할 수 있는 서버 기능을 제어한다.
  • AllowOverride : .htaccess 파일의 사용 여부를 결정한다. (All | None)
  • Require : 해당 디렉토리의 접근 허용 여부를 설정한다.
Options All 모든 Options가 MultiViews에 허용된다.
ExecCGI mod_cgi를 사용하는 CGI 스크립트 실행을 허용한다.
FollowSymLinks 설정한 디렉토리에서 심볼릭 링크를 허용한다.
Includes mod_include를 사용하는 SSI(Server Side Includes)를 허용한다.
IncludesNOEXEC SSI를 허용하지만, #exec cmd와 #exec cgi는 사용하지 못한다. 
Indexes 클라이언트가 요청한 디렉토리 경로에 DirectoryIndex 지시자에 설정한 파일이 없을 경우, 디렉토리 목록을 화면에 표시한다. (디렉토리 리스팅)
MultiViews mod_negotiation에서 제공하는 다중 확장자를 지원하기 위해 사용하는  MultiViews 기능을 사용한다.
SymLinksIfOwnerMatch 대상 파일이나 디렉토리가 동일한 사용자가 소유하고 있는 심볼릭 링크만 사용한다.
Require all denied 모든 접근을 거부
all granted 모든 접근을 허용
ip xxx.xxx.xxx.xxx 특정 IP의 접근을 허용
not ip xxx.xxx.xxx.xxx 특정 IP의 접근을 거부
host example.com 특정 호스트의 접근을 허용
not host example.com 특정 호스트의 접근을 거부

 

DirectoryIndex

  • 클라이언트가 파일이 아닌 디렉토리 경로를 요청했을 경우 제공할 파일 목록을 설정한다.
  • 예) DirectoryIndex가 index.html로 설정되었으면, 클라이언트가 example.com/abc 를 요청했을 때 abc 디렉토리의 index.html를 찾아서 반환한다.

 

<Files>

  • 해당 파일 경로, 와일드카드 또는 정규 표현식으로 설정된 파일에 대한 옵션을 설정한다.
  • 주로 접근 권한이 설정된다.

 

ErrorLog

  • Apache 에러 로그가 생성될 경로를 지정한다.

 

LogLevel

  • ErrorLog의 로그 수준을 설정한다.
emerg 서버를 동작할 수 없는 긴급상황이 발생했을 경우
alert 반드시 조치해야 할 상황이 발생했을 경우
crit 매우 치명적인 상황이 발생했을 경우
error 에러가 발생했을 경우
warn 경고 수준의 상황이 발생했을 경우
notice 오류가 아닌 정상적인 상황이지만 중요하여 사용자에게 알려야 할 경우
info 일반적인 서버 운용 로그
debug 매우 자세한 디버그 수준의 로그

 

LogFormat

 

  • 커스텀 로그에 사용되는 로그 형식을 설정할 수 있다.
  • 설정한 로그 포맷에 이름을 설정하여 간단하게 저장하고 사용할 수 있다.
%% 퍼센트 기호(%)를 로그에 표시
%a 원격 IP 주소
%A 서버 IP 주소
%B HTTP 헤더를 제외한 전송 바이트 수
%b

HTTP 헤더를 제외한 전송 바이트 수

전송한 내용이 업슨ㄴ 경우 0 대신 "-" 로 표시

%{Foobar}C Foobar 쿠키의 내용
%D 요청을 처리하는데 걸린 시간 (마이크로초 단위)
%{FOOBAR}e 환경변수 FOOBAR의 내용
%f 파일명
%h 원격 호스트명
%H 요청 프로토콜
%{foobar}i foobar: 요청 헤더의 내용
%l 원격 로그인명
%m 요청 메소드
%{foobar}n 다른 모듈이 기록한 foobar 노트 내용
%{foobar}o foobar: 응답 헤더의 내용
%p 서버의 정규 포트
%P 서버의 자식 프로세스 ID
%{format}P

서버의 자식 프로세스 ID 혹은 스레드 ID

format에는 pid , tid 설정 가능

%q 쿼리 문자열
%r 요청의 첫번째 줄
%s 요청의 상태코드
%t Common Log Format 시간 형식의 시간
%{foobar}t strftime 형식의 시간 (지역 시간)
%T 요청을 처리하는데 걸린 시간 (초 단위)
%u 원격 사용자
%U 쿼리 문자열을 제외한 요청 URL 경로
%v 요청을 서비스한 서버의 정규 ServerName
%V UseCanonicalName에 따른 서버명
%X

응답을 마쳤을 때 연결 상태

X = 응답을 마치기 전에 연결이 끊어짐

+ = 응답을 보낸 후에도 연결이 살아있음 (KeepAlive)

- = 응답을 보낸 후 연결이 끊어짐

%I 요청과 헤더를 포함한 수신 바이트 수
%O 헤더를 포함한 송신 바이트 수

 

CustomLog 

  • Access 로그 파일이 저장되는 위치와 포맷을 설정한다.
  • LogFormat에서 지정한 포맷을 이름으로 불러와서 사용할 수 있다.

 

Alias

  • DocumentRoot 하위에 존재하지 않는 디렉토리나 파일에 접근해야하는 경우에 사용한다.

 

AddType

  • Apache에서 사용할 media-type과 확장자를 매핑하여 추가한다.

 

AddEncoding

  • Apache에서 사용할 인코딩과 확장자를 매핑하여 추가한다.

 

ErrorDocument

  • 에러가 발생했을 때 서버가 클라이언트에게 반환할 것을 설정한다.
  • 서버는 클라이언트에게 1. 에러 메세지 내역 2. 간단한 텍스트 3. 내부 에러 페이지 4. 외부 에러 페이지를 반환할 수 있다.
  • 각 HTTP 상태 코드 별로 반환할 수 있다.

 

Include

  • httpd.conf가 아닌 다른 설정 파일(httpd-mpm.conf, httpd-vhost.conf 등)을 포함하여 적용한다.

 

 

참조


Apache Docs Directives : https://httpd.apache.org/docs/2.4/mod/core.html

'WebServer | WAS > Apache' 카테고리의 다른 글

Apache HTTPD to Tomcat, 로드 밸런싱(Load Balancing)  (0) 2020.06.09
Apache HTTPD to Tomcat , WEB/WAS 연동  (0) 2020.06.04
httpd 옵션  (0) 2019.09.18
apachectl 옵션  (0) 2019.09.18
[CentOS 6] 아파치(Apache) 컴파일 설치  (0) 2019.09.18

+ Recent posts