아파치 웹서버 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-주소창-디렉토리-직접-접근-설정



'서버 > 아파치' 카테고리의 다른 글

[아파치] mod_rewrite 모듈  (0) 2016.02.23
[아파치] mod_setenvif 모듈  (0) 2016.02.22
[아파치]VirtualHost 설정  (0) 2016.02.21
[아파치] httpd.conf 전역설정  (0) 2016.02.12
[아파치] mod_mpm 모듈  (0) 2016.01.12
Posted by SungHoon, Park
,