아파치 웹서버 httpds.conf 서버설정에 대해 정리한다.
ServerAdmin
- 관리자 이메일 주소를 설정한다. ServerSignature 값이 Email로 설정되었을 경우, 이메일 주소는 404, 500 에러가 발생했을 경우 에러 화면에 해당 이메일 주소가 표시된다.
DocumentRoot
- 웹 프로젝트가 있는 루트 디렉토리를 지정한다.
- 기본설정은 /var/www/html이다.
- 가상호스트에서도 사용할 수 있으므로 가상 호스트마다 각각 다른 웹 프로젝트 서비스가 가능해진다.
DirectoryIndex
- 웹요청 주소가 디렉토리만 있고 파일명이 없을 때 기본적으로 읽어서 전송할 파일명을 설정한다.
- index.html index.jsp 등
<Directory 디렉토리명></Directory>
- 디렉토리 단위별로 설정하는 지시자다. Location 지시자와 비슷하나 차이점은 Location은 URL을 기반으로 한다는 것이다. Directory 지시자는 로컬 파일의 경로를 대상으로 한다.
- 주로 Options와 접근권한을 설정하는 경우가 많다.
- 예제)
<Directory "/var/www/html">
Options Indexs FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
1) Options
- 설정한 디렉토리("/var/www/html") 하위의 모든 디렉토리와 파일에 대한 접근권한을 제어한다.
- https://httpd.apache.org/docs/2.2/ko/mod/core.html#directory [Options Directive] 참조
옵션 |
설명 |
None |
모든 접근을 허용하지 않는다. |
All |
모든 옵션설정을 허용한다. (단, MultiViews는 제외) |
Indexes |
디렉토리 접근시 DirectoryIndex에 설정한 파일이 없을 때 디렉토리내 파일 목록을 보여준다. |
Includes |
Server-side includes provided by mod_include are permitted. |
IncludesNoExec |
Server-side includes are permitted, but the #exec cmd and #exec cgi agr disabled. |
FollowSymLinks |
심볼릭 링크를 사용할 수 있다. 하지만 보안을 위해 이 옵션은 제거하는 것이 좋다. 만약 DocumentRoot 하위에 root 권한의 폴더(sbin 등)을 심볼릭 링크로 걸어놨다면 nobody로도 해당 디렉토리에 접근할 수 있게 된다. |
ExecCGI |
CGI 스크립트를 실행할 수 있다. |
MultiViews |
클라이언트가 요청한 media type과 content-encoding을 가지고 적절한 요청을 처리한다. |
2) AllowOverride
- 디렉토리에 .htaccess 파일이 있을 경우 기존 설정을 덮어쓸지 여부를 설정한다. 기본설정은 None이다.
※ .htaccess 파일은? 웹서비스 디렉토리별로 설정이 달라져야 할 경우가 있다. 이때 관리자가 모든 설정을 하기는 힘들기 때문에 개별 디렉토리마다 다르게 설정하기 위해 존재하는 파일이다. 예로, 호스팅을 받아 서비스를 할때 .htaccess 파일을 사용한다.
옵션 |
설명 |
None |
디렉토리별 설정을 허가하지 않는다. 즉, htaccess 파일을 Override하지 않는다. |
All |
.htaccess 파일을 우선 적용하도록 Override를 허용한다. |
Options |
.htaccess에 설정된 Options 지시자(디렉토리 옵션) 사용을 허용한다. |
FileInfo |
.htaccess에 설정된 AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority와 같은 문서유형 지시자 사용을 허용한다. |
AuthConfig |
.htaccess에 설정된 클라이언트 인증 지시자 사용을 허용한다. |
Limit |
.htaccess에 설정된 Order, Allow, Deny와 같은 접근제어 지시자 사용을 허용한다. |
3) Order allow, deny
- 순서대로 Allow에 대한 부분을 먼저 확인 후, Deny를 확인한다.
4) Allow
- Allow from all : 모든 클라이언트로부터의 연결을 허용한다.
- Allow from 127.0.0.1 192.168.111.100 : 127.0.0.1과 192.168.111.100 IP 클라이언트만 허용한다.
5) Deny
- Deny from all : 모든 클라인트로부터의 연결을 거부한다.
- 예)
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
<Files 파일명></Files>
- 파일명에 따라 특별한 처리를 할 때 사용한다.
- 파일명에 포함된 ?는 임의의 한 문자와 일치함을, *는 임의의 한 문자열이 일치함을 나타낸다.
- 파일명 앞에 ~가 붙게 되면 정규표현식을 사용할 수 있다.
- 예제1) 관리페이지는 외부인이 볼 수 없도록 설정
<Files admin.php>
Order deny,allow
Deny from all
Allow From 127.0.0.1
</Files>
- 예제2) htm, html, css, js, php 파일 인코딩 설정
<Files ~ "\.(htm|html|css|js|php)$">
AddDefaultCharset UTF-8
DefaultLanguage ko_KR
</Files>
<FilesMatch 정규표현식></FilesMatch>
- <Files>의 정규표현식 사용가 동일하다. 대신 <FilesMatch>는 ~를 붙히지 않아도 정규표현식이 적용된다.
- 예제1) htm, html, css, js, php 파일 인코딩 설정
<FilesMatch "\.(htm|html|css|js|php)$">
AddDefaultCharset UTF-8
DefaultLanguage ko_KR
</FilesMatch>
Redirect
- Redirect [HTTP 상태코드] [요청URL] [리다이렉트 URL]
- HTTP 상태코드는 리다이렉트가 되면서 바뀔 상태코드를 지정한다. 기본값은 302.
- 예제1)
Redirect 301 /hello http://www.naver.com
Redirect /world http://www.naver.com
RedirectMatch
- Redirect 지시자와 비슷하며 정규표현식으로 리다이렉트를 처리할 수 있다.
- 예제1) 톰캣의 WEB-INF와 META-INF 폴더를 접근 못하게 설정
RedirectMatch 404 /(?i)(WEB-INF|META-INF)(/|$)
DefaultType
- 모르는 타입이 들어왔을 경우 설정할 기본 MIME 타입을 설정한다.
LogFormat
- 서버의 로그파일 형식을 설정한다. common은 기본설정, combined는 Referer와 User-Agent가 추가되었다.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
옵션 |
설명 |
예제 |
%h |
요청한 원격 호스트 |
192.168.111.100 |
%l |
원격 로그인명 |
- |
%u |
원격 사용자명 |
- |
%t |
요청날짜 및 시간 |
[21/Feb/2016:15:28:28 +0900] |
%r |
요청의 첫번째 라인 |
GET/HTTP/1.1 |
%s |
HTTP 응답코드 |
200 |
%b |
HTTP 헤더를 제외한 응답의 Byte 길이 |
66 |
%{헤더명}i |
HTTP 헤더에서 작성한 헤더명에 대한 값을 출력 |
%{Referer}i %{User-Agent}i |
ErrorLog
- 에러로그 파일을 설정한다.
- 예제)
ErrorLog "| /usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/error.log.%Y%m%d 86400" combined
CustomLog
- 클라이언트의 요청이력을 남길 로그파일을 설정한다.
- 예제)
CustomLog "| /usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/access.log.%Y%m%d 86400" combind
Alias
- 요청 URL을 특정 파일 시스템에 연결시킨다.
- 예제)
Alias /helpFiles /nas/2016/helpFiles
AddDefaultCharset
- 컨텐츠 형식이 text/plain이나 text/html일 경우 HTTP 응답 헤더에 설정된 charset 헤더를 추가한다.
- 가상 호스트마다 다르게 설정할 수 있다.
- HTTP 응답 헤더에 charset이 지정되었을 경우는 HTML <meta>태그로 charset을 지정해도 헤더에 있는 charset이 적용된다. DefaultCharset과 다른 HTML이 있다면 파일의 인코딩을 변경하거나 <meta>태그로 charset을 명시적으로 지정하고 해당 지시자를 Off하여야 한다.
- 예제)
AddDefaultCharset UTF-8
결과 : Content-Type : text/html; charset=UTF-8
※ 참고자료
- 리눅스를 활용한 회사 인프라 구축의 모든 것
- http://mcpaint.tistory.com/133
- http://toy0box.tistory.com/entry/Apache-httpdconf-주소창-디렉토리-직접-접근-설정