httpd.conf 파일은 크게 세부분으로 나누어져 있다.
Section 1: Global Environment : 아파치 전체적인 영향이 미치는 설정
Section 2: 'Main' server configuration : 주 서버에 대한 설정
Section 3: Virtual Hosts : 가상 호스트에 대한 설정
자, 그럼 이제부터 이 아파치웹서버의 모든 환경을 설정하는 아파치환경파일 httpd.conf파일의 설정방법에 대해서 상세히 알아보도록 하자.
<IfModule> 지시어
<IfModule test >
... </ IfModule> 섹션은 모듈이있을 때 처리하는 지시문을 지정하는 데 사용합니다. <IfModule> 섹션에
포함된 지시어는 test 로 지정하는 모듈이 설치되어있는 경우에만 처리됩니다. 만약 test 가 포함되어
있지 않으면 시작과 끝 사이에있는 지시어는 무시됩니다.
<IfModule> 섹션 지시어로 지정 test 는
다음 두 형식 중 하나를 취합니다.
- module
name
- ! module
name
전자의 경우, module name 라는
이름의 모듈을 Apache에 포함되어 있으면 (컴파일된 것과 LoadModule 을
사용하여 동적으로로드했으나 모두) 시작과 끝 사이의 지시어를 처리 됩니다. 후자의 경우는 반대로, module name 이
포함되어 있지 않은 경우에
처리됩니다.
module name 인수는 컴파일했을 때 모듈의 파일 이름입니다. 예를
들어, mod_rewrite.c 입니다. 모듈이
여러 개의 소스 파일로 구성되는 경우 문자열 STANDARD20_MODULE_STUFF 있는
파일 이름을 사용하십시오.
<IfModule> 섹션은 중첩될 수 있으며 여러 모듈 테스트를 수행하기 위해 사용할 수 있습니다.
특정 모듈의 설치 유무에 따라 작동하는 설정 파일의 원본이 필요한 경우에만이 섹션을 사용하십시오. 정상 작동은 지시어를<IfModule> 섹션에
넣을 필요는 없습니다.
<Directory> 지시어
지정된 디렉토리와 그 하위 디렉토리에만 지시어를 적용시키기 위해서는 <Directory> 와 </ Directory> 대로 지시자 울타리합니다. 그
안에는 디렉터리 컨텍스트에서 허용되는 모든 지시어를 사용할 수 있습니다. directive-path 는
전체 경로 또는 Unix 쉘 형식의 와일드 카드를 지정합니다. ? 는
단일 문자 * 는 모든 문자열과 일치합니다. 셸의
지정뿐만 아니라 문자의 범위를 [] 로 지정할 수 있습니다. 와일드 카드는`/ '문자는 일치하지 않기 때문에 / home / user / public_html 에 <Directory
/*/public_html> 은 일치하지 않지만 <Directory
/home/*/public_html> 은 일치합니다.
예 :
<Directory
/usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</ Directory>
directory-path 인수주의하십시오 : 인수는 Apache 파일을 액세스하는 데 사용하는 파일 시스템 경로에 그대로 일치해야합니다. 있는<Directory> 에 적용되는
지시어는 다른 심볼릭 링크를 따라도 같은 디렉토리를 다른 경로에 액세스하는 경우에는 적용되지 않습니다.
~ 라는 문자를 추가하여 확장된 정규식을 사용할 수 있습니다. 예를
들면 :
<Directory ~
"^/www/.*/[0-9]{3}">
같은 지정된 경우 / www / 아래에있는
숫자 3 문자 디렉토리들과 일치합니다.
만약 여러 개의 (정규식 제외) <Directory> 섹션이 문서가 포함된 디렉토리 (또는 상위 디렉토리 중 하나)과 일치하는면 .
htaccess 파일의 지시어를로드하면서 짧은 경로부터 적용됩니다. 예를
들어,
<Directory />
AllowOverride None
</ Directory>
<Directory /home/>
AllowOverride FileInfo
</ Directory>
로 설정하고, 문서 /
home / web / dir / doc.html 에 액세스할 수있는 경우에는 다음과 같이 작동합니다 :
- AllowOverride
None 이 적용된다. ( . htaccess 파일은 무효가된다)
- AllowOverride
FileInfo 가 적용된다 ( / home 디렉토리에).
- /
home / .htaccess , / home / web / .htaccess , / home /
web / .htaccess 의 순서로 그 파일의 FileInfo 지시문이 적용된다.
정규식은 일반 섹션이 적용되기 전에 고려되지 않습니다. 그
후 모든 정규식 설정 파일에 나온 순서대로 시도합니다. 예를 들어, 다음과 같은 경우에
<Directory ~ abc$># ...
directives here ...</ Directory>
정규 표현식 섹션은 모든 일반 <Directory> 하면 . htaccess 적용이 끝나면까지 고려되지 않습니다. 그런
다음 정규식은 / home / abc / public_html / abc 와 일치하고
해당 <Directory> 이 적용됩니다.
Apache는 기본적으로 <Directory
/> 액세스 Allow from All 되고있다는 점에
유의하십시오. 이것은 URL에서 매핑되는 어떤 파일도 Apache는 보낸다는 것입니다. 이것은 다음과 같이 변경하는
것이 좋습니다되고 있습니다.
<Directory />Order Deny,
AllowDeny from All</ Directory>
그리고 접근을 가능하게하고
싶은 디렉토리에 개별적으로 설정하면 좋을 것입니다. 이
근처에 대해서는 보안 조언 을 참조하십시오.
디렉토리 섹션 httpd.conf 파일 씁니다. <Directory> 지시문은 중첩될 수 없으며, <Limit> 이나 <LimitExcept> 섹션에
작성할 수 없습니다.
참조
<Location> 지시어
<Location> 지시어는 URL을 통해 중에 지시어의 적용 범위를 제한합다. <Directory> 지시어와
비슷하여 </ Location> 지시어로 끝나는 부분을 시작합니다. <Location> 섹션은 <Directory> 섹션과 . htaccess 로드 후 <Files> 섹션을
적용한 후에 설정 파일에 나온 순서대로 처리됩니다.
<Location> 섹션은 완전하게 파일 시스템과 관련없이 작동합니다. 이로부터 유도되는 결과에いつく가지 주의할 점이 있습니다. 가장
중요한 것은 파일 시스템의 위치에 대한 액세스를 제어 <Location> 지시어를
사용해서는 안된다는 것입니다. 여러 URL을 파일
시스템의 동일한 위치에 매핑되는 수가 있으므로 그러한 액세스 제어는 피할 가능성이 있습니다.
언제 <Location> 를
사용하거나
<Location> 지시어는 파일 시스템 외부 콘텐츠에 지시어를 적용 할 때 사용하십시오. 파일 시스템에있는 컨텐트를 <Directory>하면 <Files> 을
사용하십시오. 예외는 <Location
/> , 이것은 서버 전체에 설정을 적용하는 간단한 방법입니다.
모든 (프록시 제외) 요청에
대해 URL은 / path / 라는 접두사 http://servername 를 포함하지 않는 형태로 일치합니다. 프록시 요청의 경우에는 scheme :/ /
servername / path 라는 접두어를 포함하는 형태로 일치하는 접두사를 포함하여 지정할 필요가 있습니다.
URL에 와일드 카드를 사용할 수 있습니다. ? 은 단일 문자, * 는 어떤 문자열과 일치합니다.
- 문자를 추가하여 확장 정규 표현식을 사용할 수도 있습니다. 예를
들면 :
<Location ~
"/(extra|special)/data">
URL에 / extra / data 가 / special / data 라는 문자열이 포함되어있는 경우 일치합니다. <LocationMatch> 지시어는 <Location>정규 표현식과 동일한 동작을합니다.
<Location> 기능은 SetHandler 지시어와
조합하여 사용하면 특히 유용합니다. 예를 들어, foo.com 브라우저에서만
상태 조회를 사용하고 싶다면, 다음과 같이하면 좋습니다.
<Location /status>SetHandler
Server-statusOrder Deny, AllowDeny from allAllow from. foo.com</
Location>
/ (슬래시) 참고 사항
슬래시 문자가 URL에 표시되는 위치에 따라 변화하는 특별한
의미를 가지고 있습니다. 파일 시스템에서 이용하는 경우에는 복수의 slash에서도 하나의 슬래시로 취급되는 경우가 많다하지만 ( 즉 , / home / / / foo 는 /
home / foo 와 같은 말한 것처럼) URL에서는 반드시 그렇지 되는 것은
아닙니다. <LocationMatch> 지시어와
정규 표현식을 이용한 <Location> 지시어는 여러 슬래시 성냥시키고
싶은 경우에는 명시적으로 기술할 필요가 있습니다.
예를 들어, <LocationMatch
^/abc> 은 / abc 는 요청 URL과 일치하지만 / / abc 는 요청 URL은 일치하지 않습니다. (식이 아닌)<Location> 지시어는 proxy 요청에
사용할 때 같은 동작을하지만 (식이 아닌) <Location> 를 proxy하지 않은 요청에 사용할 때, 하나의 슬래시 여러 슬래시
일치합니다. 예를 들어, <Location
/abc/def> 으로 지정하고, / abc / / def 라는
요청이 있으면 일치하는 것입니다.
참조
### Section
1: Global Environment
전제환경설정 파트로 Section 1에서 설정하는 것들은 아파치 웹서버에
전반적인 영향을 미친다.
ServerType
standalone
서버의 구동방법으로는 standalone과 inetd방식이 있는데, standalone
방식은 하나의 웹데몬(아파치서버)이 클라이언트의
접속을 모두 처리하는
방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용한다. inetd 방식은
inetd라는 시스템의 /etc디렉토리 끝에 존재하는
inetd라는 슈퍼데몬이
클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다.
일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용한다.
inetd 방식은 유닉스 플랫폼에서만 지원된다
ServerRoot
"/usr/local/apache"
아파치서버의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후로 나오는
대부분의 패스들은 이 경로에 대한 상대경로로 지정이 된다. 예를 들어
환경설정파일, 에러로그파일등의 상대경로의 기준이 되는 위치이다.
주의! 만약 서버 루트를 NFS (또는 기타
네트웍 파일 시스템) 마운트된
곳에 두고자 한다면 LockFile 문서를 꼭 읽어보아야 한다.
문서를 읽고 나면 앞으로 닥칠 지 모르는 몇 가지 문제점을 피할 수 있다.
디렉토리 경로 뒤에 슬래쉬(/)
문자를 쓰지 않는다!!!
LockFile
logs/accept.lock
아파치 컴파일시
USE_FCNTL_SERIALIZED_ACCEPT나
USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때 사용되는
LockFile의 경로지정시에 사용된다. 가급적 기본값으로 사용한다.
이 값을 바꾸는 경우는 로그 디렉토리가 NFS 마운트된 곳에
있는 경우로서 잠금 파일은 항상 네트웍 파일 시스템이 아닌 로컬 디스크에 저장되어야 하기 때문이다. 주 서버 프로세서의 PID 값이 자동으로 파일 이름 뒤에 붙는다.
PidFile
logs/httpd.pid
PidFile 설정은 ServerType을 Standalone으로 설정했을때만 유효한
것으로 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세서ID(PID)를
기록하는 파일을 지정한다. 당연히 아파치서버가 재시작되거나 과부하로
인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도
바뀌게 된다. 즉
다시말해서 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치서버의
프로세스번호(PID)값이 기록된다고 하면 정답이다.
ServerRoot를 기준으로한
상대경로로 지정된다. 절대경로로 지정하려면
"/"로 시작하는 절대경로를
적어주면 된다.
ScoreBoardFile
logs/apache_runtime_status
ScoreBoardFile: 내부 서버 프로세스 정보를 기록하는데 사용하는 파일.
모든 아키텍쳐에서 꼭 필요한 것은 아니다. 하지만 필요하다고 생각하는
경우에는 하나의 아파치 프로그램을 두 번 이상 실행시키는 경우 값이
중복되지 않도록 해주는 것만 잊지 않으면 된다.
ResourceConfig
conf/srm.conf
AccessConfig
conf/access.conf
아파치 서버의 환경설정파일은 3개이며 httpd.conf, srm.conf, access.conf
가 그것이다. 그러나 하나의 설정파일로 하는 것이 효율적이기 때문에
지금은 httpd.conf파일안에 3개의 파트(Section)로 나누어서 하나의
파일안에서 설정을 하고 있다. srm.conf와
access.conf파일의 내용은 현재
비어있는 상태이지만, 필요하다면 이 파일 내에도 설정을 할 수 있다.
아파치 서버가 실행이 될 때는 httpd.conf, srm.conf, access.conf 순으로
언제나 이 3개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이
두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 "#"으로
붙여
두면 주석처리되어 무시된다. 또는 "/dev/null"
(유닉스의 경우) 또는 "nul"
(Win32) 값을 지정한다.
ResourceConfig
/dev/null
AccessConfig
/dev/null
Timeout 300
클라이언트의 요청에 의해 서버와 연결이 되었을 때
클라이언트와
서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을
초단위로 설정한다. 초기값은 1200이며 보통은 300초로 지정을 한다.
네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.
KeepAlive On
접속한 채로 특별한 요청없이 지속적인 연결을 허용할
것인지를 설정한다.
허용하지 않으려면 off
KeepAlive: 지속성(persistent) 접속을 허가할 것인가 말 것인가?
(한 번의 접속에서 여러 개의 요청을 처리할 것인가 여부)
허가하지 않기 위해서는 "Off"로 설정한다.
허가하지 않는 것과 허가하는 것과의 효율 차이는 매우 크다.
MaxKeepAliveRequests
100
클라이언트가 접속된 시간동안(지속성 접속 기간 동안) 아파치서버에 요청할 수 있는 최대의 개수를 지정한다. 0을 지정하면 제한없음을 의미하며, 서버의 성능향상을 위하여 가능한 높은
값이 좋다.
KeepAliveTimeout
15
아파치 서버는 같은 접속상태의 클라이언트에서 여기서
지정한 초만큼의
요청이 없었을 때 접속을 끊게 된다.
MinSpareServers
8
MaxSpareServers
20
아파치 웹서버는 성능향상과 빠른 응답속도를 위해
유휴서버(현재
서비스대기 중인 프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의
상황에 따라 달라지게 된다. 유휴서버가
MinSpareServers의 개수(8 보다
적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(20)보다 많게
되면 죽이게 된다. 즉, 유휴서버의 개수를 적절히
조절하기 위한 것이라
생각하면 된다.
서버 풀(Server-pool) 크기 조정. 몇
개의 프로세스가 필요한지 여러분에게
추측하도록 하기 보다는 현재의 부하 상태에 자동으로 적응하도록 되어 있다.
아파치 서버는 현재의 부하 상태와 순간적으로 급격히 상승하는 경우 값 (예를 들어
하나의 네스케이프 브라우져에서 동시에 여러 개의 요청이 들어올 수 있다)을 처리할 수 있는 충분한 갯수의 서버 프로세스를 유지하려 노력한다. 아파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지 점검한다. 만약MinSpareServers 보다 적다면 여유 서버
프로세스를 생성한다. 만약 MaxSpareServers 보다
많으면 불필요한 여유 프로세스를 제거한다. 이 곳에 제시된 기본값은 거의 대부분의 사이트에
적합하다.
StartServers
5
아파치 웹데몬이 구동될 때 자식프로세스를 몇 개로
할 것인가를
지정한다. 시작할 때 동시에 띄우게 될 웹데몬의 개수이다.
그러나 웹데몬이
구동되고 난 뒤엔 시스템의 상황(부하율등)에
따라 대부분 합리적인
개수만큼 동적으로 생성되었다가 죽기도 하므로 큰 의미를 가지는 것은
아니다.
MaxClients
150
아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는
이 상한값으로
제한한다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면
아파치는 응답하지 않고 이 요청을 무시한다. 이를 제한하는 이유는
시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한
것이다.
서버 프로세스의 최대값, 즉 동시에 접속할 수 있는 클라이언트 갯수를 제한하는 값이다. 만약 이 값에 도달한다면 클라이언트의 요청은 봉쇄될 것이다. 따라서 이 값이 너무 낮아서는
안된다. 이 값은 아파치 서버가 너무
많은 자원을 소비하여 전체 시스템을 먹통이 되도록 하는 것을 방지하기 위해 사용될 뿐이다.
MaxRequestsPerChild
30
아파치 웹서버의 자식프로세스들이 클라이언트의 요청
개수를 지정한다.
만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이
자식프로세스는 자동으로 죽게된다. 이 값이 0으로
설정이 된다면
자식프로세스가 자동으로 죽는일은 없을 것이다. 그러나 0아닌
다른 값으로
설정함으로서 프로세스의 수를 적절히 조절하여 시스템의 부하조절과
자원낭비를 어느정도 방지 할 수 있다.
각 자식 프로세스가 죽기 전까지 처리할 수 있는 요청 갯수. 한 프로세스가 너무 오랫 동안 사용되면 메모리 누출이나 자원
누출(아파치 때문에 또는 잘못된 라이브러리 때문에)이 발생할
수 있으므로 자식 프로세스는 자동으로 죽는다. 대부분의
시스템에서는 필요치 않으나 솔라리스에서와 같이 라이브러리에서의 자원 누출 현상을 막기 위해 필요하다.
Listen
3000
Listen 12.34.56.78:80
시스템의 기본값이외에 다른 IP Address와 포트에 대해서도 연결할 수
있도록 해 준다. 환경설정파일(httpd.conf) 맨뒤에
나오는 가상호스트(Virtual
Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.
BindAddress
*
서버가 응답할 수 있는 IP Address를 설정하는 것이다. 하나의 시스템에
있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서
많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 한다. "*"으로
설정이 되었다면 모든 IP Address에 대해 응답할 수 있으며, IP Address를
지정한다면 지정한 IP Address에 대해서만 응답할 수 있게 된다.
여러개의 IP Address를 ISP로부터 할당받아서 웹호스팅서비스를 하고자 한다면
이부분에서 지정해 주면된다. 이 설정파일의 맨 뒷부분에 나오는
<VirtualHost>~</VirtualHost>부분의 IP bind 가상호스트부분에서
아파치
웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 한다.
LoadModule
foo_module modules/mod_foo.so
동적 공유 객체(Dynamic Shared Object, DSO) 지원
DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련된 지시자를
사용하기에 앞서 알맞게 `LoadModule' 지시자로 모듈을 지시해주어야
한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은 아파치 1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는 httpd 바이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을 알고 싶을 때에는 `httpd -l' 명령을 실행한다.
주의: 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이 아무렇게나 순서를 바꾸지
말라.
ExtendedStatus
On
server-status로 아파치웹서버의 상태를
상태를 모니터링 할 때
"자세한상태정보"기능을 제공할 것인지(On)
아닌지(Off)를 설정하는 것이다.
ExtendedStatus 지시자는 "server-status" 처리기가
호출되었을 때 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지 (ExtendedStatus
On) 아니면 매우 기본적인 정보만 생성시킬 것인지를 (ExtendedStatus Off)
제어한다. 기본값은 Off 이다.
### Section 2: 'Main' server configuration
Section 2에서 설정하는 항목들은 아파치의
주된서버가 사용할 값들을
지정한다. <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은
여기서 지정된 값이 기본값으로 적용된다. 또한
여기서 지정하는 값을 각
<VirtualHost>내에도 지정할 수 있으며 이 경우엔 각<VirtualHost>내에서
지정한 값이 우선 적용된다.
Port
80
아파치웹서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면
80번으로 해둬야 한다. 사용가능한 포트는 0 ~
65535이며 1024이하의
포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른
포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다.
특별한 지정이 없다면 <VirtualHost>에 정의된 각각의 가상호스트들의
기본포트가 된다. 만약 <VirtualHost> 내에서 Port가
지정이 된다면 그
포트번호가 우선한다.
(특별히 PORT를 따로 지정해 줄 필요가 있을 때는 따로 지정해 주며,
이때는 웹서버로 접근할 때 반드시 따로지정한 PORT번호로 접근해야 한다.
예를들어 Port 1234로 지정했다면, 접근시 : http://www.domain.co.kr:1234
로 접속해야한다. 단, 80번은 default이므로 Port번호를 입력하지 않아도
도메인만으로 그냥 접근할 수 있다. 예:
http://www.domain.co.kr )
1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는 root 권한으로 실행되어야 한다.
User nobody
Group nobody
아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user와 group으로
응답을 하게된다. 이 설정은 ServerType이 Standalone방식이며, 아파치의
실행이 root권한으로 실행이 되었을 때 유효한 것이다.
많은
웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약
시스템에 nobody
user가 없다면 새로생성(useradd)을 해야 할 것이다. 단, root로 설정하는
것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을
한다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서
깊게 고려를
해봐야 한다.
httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은 httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자 권한으로
전환해야 한다.
ServerAdmin
webmaster@www.domain.co.kr
여기서 지정하는 email
address는 웹문서 로딩에러등의 문제에서
클라이언트측으로 보내질 메일주소값이다. 대부분
웹서버관리자의 email address로 설정을 한다.
ServerName
new.host.name
클라이언트에게 보여주는 서버의 호스트이름을 지정한다. www를 쓰지 않는
호스트에서 www를 쓰는 것처럼 보이게 할 수 있다. 예를
들어 서버의 호스트 이름이 bbs.manualand.co.kr 이지만 이를 www.manualand.co.kr로 지정해서 쓸 수 있다. 이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를
보여준다.
ServerName은 클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우 호스트
이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제
이름이 아닌 'www'를 사용하도록 하는데 사용할
수 있다.)
주의: 호스트
이름을 아무렇게나 만들어선 안된다. 이 이름은 여러분의 호스트에
주어진 타당한 DNS 이름이어야 한다. 잘 모르겠으면 네트웍 관리자에게
문의하라. 호스트가 등록된 DNS 이름을 갖고 있지
않는 경우에는 이 곳에 IP 주소를 적는다. 어찌 되었든 IP 주소를 사용하여(예를
들어 http://123.45.67.89/) 접속할 수 있다. 이런
식으로 해서 리다이렉션이 작동하도록 할 수 있다.
DocumentRoot
"/usr/local/apache/htdocs"
아파치 웹서버의 웹문서가 있는 경로를 지정한다. 예를 들어
"http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의
절대 경로는 여기서 지정된
"/usr/local/apache/htdocs/index.html"이 된다.
경로의 맨 마지막에
"/"를 추가해서는 안 된다. / 를 포함하면 아파치 서버는 URL에도 / 이 있어야 처리함을
잘 알아두자.
기본적으로 모든 요청은 이 디렉토리로부터 처리된다. 하지만 심볼릭 링크나 앨리어스(alias)를 사용하여 다른 위치를
가리키도록 할 수 있다.
아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와 기능을 허용할
것인지 거부할 것인지 여부를 설정할 수 있다. 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도
영향을 미친다. 우선, "기본값"을 매우 제한적인 상태로 설정한다.
Options None
AllowOverride None
이 곳부터 허용할 특정 기능을 알맞게 설정해나간다는 사실을 주목하자. 여러분이
기대한 대로 작동하지 않는 것이 있다면 그 기능을 가능 상태로 설정해두었는지 점검하기 바란다.
다음 값에는 "None",
"All", 또는 "Indexes",
"Includes", "FollowSymLinks", "ExecCGI",
"MultiViews"의 자유로운 조합이 가능하다.
"MultiViews" 만큼은 "Options
All"을 사용한다 할 지라도 명시적으로 적어야만 작동한다는 사실을 알아두자.
Options Indexes Includes ExecCGI FollowSymLinks
다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤
옵션을 마음대로 제어할 수 있는지 결정한다.
"All" 또는 "Options",
"FileInfo", "AuthConfig", "Limit"의 자유로운 결합이 가능하다.
AllowOverride None
서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.
Order allow,deny
Allow from all
Deny from env=go_out
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory>에서 지정되는 값에
대한 옵션은 다음과 같은 의미를 가지고
있다.
None
: 일단 모든 허용을 하지 않는다.
All
: 모든 허용을 한다.
Indexes :
Includes :
FollowSymlinks :
예를들어,
DocumentRoot 안쪽이 아니고 바깥쪽에 자잘한 파일들이 있다면
하나하나씩 Alias 하는 방법이 있습니다. 상당히 아파치 설정파일이 지저분해지요.
이럴때에는 간단히 link 를 사용하면 됩니다.
즉 /usr/share/docs 라든지 기타 다른 디렉토리에
존재하고
DocumentRoot 안쪽으로 굳지 복사할 필요가 없는 경우에
자주 사용됩니다.(물론
우선적으로 접근 권한문제 해결)
또한 아파치를 잠시 stop 하지 않도고 얼마든지 이런 URI 정보를
쉽게 고칠수 있다는 장점이 있습니다.
한가지 더 예를 든다면 아주 큰 파티션에 많이 데이터가 있는데
웹으로 잠시 공개하고자 한다면 더욱 필요하겠지요.
SymLinkIfOwnerMatch :
자기 소유의 파일이 아니더라도 최소한 읽기 권한만 있더라도
링크는 가능합니다.
아파치는 자식프로세스가 nobody 이므로 nobody 권한으로
접근이 가능한(읽기모드) 모든
파일은 링크가 가능하고
웹으로 접근이 가능합니다.
그리고 nobody 도 실제로 다른 계정 사용자처름 시스템의
계정중의
하나일 뿐입니다.
다만 그 권한이 아주 미약하게 설정되어 있을 뿐입니다.
ExeCGI
:
MultiViews :
UserDir
public_html
~user 요청을 받았을 때 사용자의 홈 디렉토리 뒤에 추가할 디렉토리
이름.
유저별 홈디렉토리 설정
하나의 아파치 웹서버에서 여러 사용자의 홈페이지를
별도로 만들어
관리할 때 필요한 개별 가입자의 홈페이지 디렉토리이름이다. 예를 들어
sspark이란 계정가입자의홈페이지는
"http://manualand.co.kr/~sspark"라는
홈페이지를 가지고 있을 때 sspark의
계정에서 "public_html"이란
디렉토리가 홈디렉토리가 되어 이 디렉토리에 있는 초기문서 index.html을
불러서 보여주게 된다.
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY
MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>
DirectoryIndex
index.html index.htm index.cgi
디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를
지정해 준다. 즉, 디렉토리 이름만을 지정하더라도
여기서 지정한
index.html을 찾아서 웹브라우즈에 보여준다. 여러개의 파일을 지정할 수
있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를
들어
"DirectoryIndex index.html
index.htm"로 지정했다면 먼저 "index.html"을
찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을
찾아서 로딩해 준다. 여러 개를 나열할 때는 스페이스로 구분한다.
AccessFileName
.htaccess
디렉토리별로 접근제어할 정보(ID, Password)를 담고
있는 파일을
지정한다. 디렉토리별로
인증을 거쳐서 접근할 수 있는 설정을 하기 위한
것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에로 접근하려고 할
때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근 허용하는
것이다. 보안상의
이유로 이 파일의 이름을 다른 이름으로 바꾸로 싶다면
".htaccess"대신에 다름 이름을 적어주면 된다.
다음 행은 웹 브라우져가 .htaccess 파일을 접근할 수 없도록 하는 설정이다. .htaccess에는 인증 정보가 들어있는
경우가 빈번하므로 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다. 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라. 만약 AccessFileName 설정을 다른 파일명으로
바꾸었다면 알맞게 .htaccess를 그 이름으로 바꾸어준다.
<Files ~
"^.ht">
Order allow,deny
Deny from all
</Files>
바로 위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는
옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이
옵션을 주석처리 해 둔다면 ".htaccess"파일에 대한 보안은 누구도
장담할 수
없을 것이다.
CacheNegotiatedDocs
기본적으로 아파치는 내용에 따라 협상된 문서에 대해서는 "Pragma: no-cache" 내용을 전송한다. 이
행은 프록시 서버로 하여금 문서를 캐쉬하지 않도록 요청한다.
다음 행의 주석을 풀면 이 기능을 해제하고 모든 프록시가 문서들을 캐쉬할 수 있도록
한다
UseCanonicalName
On
(1.3 버전에 새롭게 등장) 이 설정을 켜두면, 아파치가 자기 참조 URL(반응이 오고 있는 서버를 다시 가리키는 URL)을
만들 필요가 있을 때마다 "공식적인" 이름을
만들기 위해 ServerName과 Port를 사용한다. 그렇지 않으면 아파치는 가능한 한 클라이언트가
제공한 호스트이름:포트 값을 사용한다. 이 설정은 CGI 스크립트의 SERVER_NAME, SERVER_PORT에도
영향을 미친다.
TypesConfig
conf/mime.types
웹서버의 mime
type을 지정한 파일을 지정한다. mime.types파일은 서버에
의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.
DefaultType
text/plain
mime.types 파일에 정의 되어있지 않은 파일형식에
대한 요청을 받았을 때
알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.
DefaultType이란 파일 확장자와 같은 것을 통해 MIME 타입을 알 수 없는 문서에 대하여 사용할 기본 MIME 타입을 말한다. 여러분의 서버에 주로 텍스트나 HTML 문서가 많다면 "text/plain"을
쓰는 것이 좋다. 대부분이 실행 프로그램이나 이미지 등 바이너리인 경우에는 웹 브라우져가 텍스트라고 생각하여 바이너리 파일을 화면에 표시하지 않도록
하기 위해 "application/octet-stream"를 적는다
HostnameLookups
Off
웹서버의 로그(access_log)를
지정하는 Format에서 "DNS Lookup"으로
지정하였을 때, domain으로 남길 것인가, IP
Address로 남길 것인가를
지정한다. Default로 Off는 IP Address로 남기는 것이며, Domain으로 변경할
필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게
되면 IP address를 IP Domain으로
변환해야 하므로 속도가 조금 느릴 수
있다.
MIMEMagicFile
conf/magic
mod_mime_magic 모듈을 사용하면 파일의 내용을 가지고 파일의 타입에 힌트를 얻는다. MIMEMagicFile 지시자를
사용하여 모듈에게 힌트 정보가 저장되어 있는 파일을 설정한다. mod_mime_magic은
기본 서버의 일부가 아니다.(따라서 LoadModule 설정을
사용하여 모듈을 추가해야 한다.) 또는 서버를 다시 컴파일해서 mod_mime_magic을
추가해야 한다. 그렇기 때문에 컨테이너에 포함되어 있는 것이다. 다음 설정은 모듈이 서버에
포함되어 있을 때에만 MIMEMagicFile 지시자를 처리하도록 해준다.
HostnameLookups
Off
클라이언트의 이름 또는 IP 주소만을 기록할 지 여부.
예를 들어 www.apache.org (on) 또는
204.62.129.132 (off) 기본값이 off 인 이유는 각 클라이언트
요청이 올 때마다 최소한 1 번 이상의 네임 서버
요청이 발생하기 때문이다. 그러나 꼭 필요한 경우에는 이
기능을 켜둔다.
access.log에 기록할 때 클라이언트 IP 또는 이름으로 기록할지를 설정한다.
ErrorLog
logs/error_log
아파치 웹서버의 에러로그 기록파일을 지정한다. 참고할 사항은 맨
마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을
지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게
되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.
LogLevel
warn
바로위에서 설정한 에러로그 파일에 얼마나 자세하게
적을 것인지를
결정한다. 다음에 해당하는 순서대로 중요도가 정해진다.
" debug → info →
notice → warn → error → crit → alert → emerg "
LogFormat
"%h %l %u %t "%r" %>s %b "%{Referer}i"
"%{User-Agent}i"" combind
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
바로 아래에서 사용할 CustomLog에서 사용할 몇가지 로그형식의 별명을
정한 곳이다.
웹서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 한다.
웹서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는
곳이다. 원하는 정보를 지정해서 볼 수 있으므로, 관리자에게
필요한
Format으로 설정해야 하며, 또한 접속통계를 내기에 적당한 Format으로
설정해 둬야 한다.
CustomLog
logs/access_log common
위에서 정한 로그형식(여기선 common)대로 로그를 남기게 된다.
맨마지막에서 지정하는 <VirtualHost>부분에서도 아파치 1.3.9버전 부터는
CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공한다.
<VirtualHost>에서 CustomLog를 지정하지 않으면 여기서 지정한
형식대로
로그를 남기게 되며 <VirtualHost>부분에서 CustomLog를 지정했을
경우에는 여기서 지정한 로그형식은 무시된다.
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
#CustomLog logs/access_log combined
위에서 지정한 4가지의 로그형식(combined,
common, referer, agent)중에서
원하는 부분의 #(주석행)을 제거하면 지정된다.
하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는
(통합 로그파일 형식) 다음 지시 내용을 사용하라.
CustomLog logs/access_log combined
ServerSignature
On
서버가 생성하는 문서(error documents, FTP directory listings,
mod_status and mod_info output etc., but not CGI generated documents)의
trailing footer line의 설정을 가능하게 한다.
부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리
목록, mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에 서버
버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다. "Email"로
설정하면 ServerAdmin으로의 mailto: 링크를
포함한다. On | Off | EMail 중 하나로 설정한다.
ServerSignature EMail
Alias
/icons/ "/usr/local/apache/icons/"
필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있다. 사용하는 형식은
다음과 같다.
Alias fakename(가상이름) realname(진짜이름)
가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야 처리함을
잘 알아두자. 따라서 "/icons"는
별칭 처리되지 않고 "/icons/"만 별칭 처리된다.
특히 DocumentRoot 밖에 있는 디렉토리로 Alias를
만들었다면, 직접 대상 디렉토리의 접근을 허용해줘야 한다.
예제:
Alias /image /ftp/pub/image
<Directory /ftp/pub/image>
Order allow,deny
Allow from all
</Directory>
ScriptAlias
/cgi-bin/ "/usr/local/apache/cgi-bin/"
ScriptAlias는 서버스크립트를 포함한다. ScriptAlias는 실제디렉토리 안에
들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을
제외하고는 근본적으로 Alias와 같다.
서버 스크립트를 포함하는 디렉토리를 제어한다. ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리 안에 들어있는
문서를 실행 프로그램으로 취급하여 실행한다. 맨 뒤에 붙는
"/" 에 대한 규칙은 Alias와 마찬가지이다.
Redirect
예전URI 새URI
Redirect를 사용하면 서버의 이름공간에 존재했으나 현재에는 존재하지 않는 문서에
대하여 클라이언트에게 통보할 수 있도록 해준다. 이렇게 함으로써 위치가 변한 새로운 문서를 어디에서 찾을 수 있는지 클라이언트에게 알려줄
수 있다.
IndexOptions
FancyIndexing
IndexOPtions는 디렉토리목록을 표시할 때
사용할 옵션을 지정한다.
Standard는 표준적인 디렉토리를 나타내며, FancyIndexing은 좀더 예쁜
디렉토리목록을 표시해 준다.
아래에서 지정하는 AddIcon으로 시작하는 설정은 바로위에서
설정한
디렉토리인덱싱 옵션을 FancyIndexing으로 한 경우에 해당하며 디렉토리
목록을 표시할 때 각 파일 확장자에 따라서 어떤 아이콘을 선택하여 보여줄
것인지를 지정한다.
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
DefaultIcon이란 명시적인 아이콘을 갖고
있지 않는 파일에 대한 기본 아이콘 파일을 설정한다.
AddDescription
"GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz
AddDescription은 서버가 생성한 인덱스의
파일 뒤에 간단한 설명을
표시할 때 사용한다. 이 설정은 IndexOptions가 FancyIndexing으로
설정되었을때만 표시되며, 설정형식은 다음과 같다.
형식 : AddDescription "표시할 설명" 파일확장자
ReadmeName
README
ReadmeName은 디렉토리 목록표시 뒤에 붙여서
보여줄 README파일의
이름을 지정한다.(일종의 꼬릿말)
HeaderName
HEADER
HeaderName은 디렉토리 목록표시 앞에 붙여질
파일의 이름을 지정한다.
(일종의 머릿말)
서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다.
만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로
추가한다.
IndexIgnore
.??* *~ *# HEADER* README* RCS CVS *,v *,t
디렉토리 목록을 인덱싱할 때 제외할 파일명을 지정한다. 즉 디렉토리
목록에 포함하지 않을 파일을 지정한다. 쉘스타일의 와일드카드(*, ?)가
허용된다.
AddEncoding
x-compress Z
AddEncoding x-gzip gz tgz
AddEncoding은 특정브라우즈(Mosaic/X 2.1+)에서 받고있는 중에 정보에
대한 압축해제를 할 수 있도록한다. 단 모든 웹브라우즈에서 이 기능을
제공하는 것은 아니다. 이름이 유사하기는 하지만 다음부터 나오게 될 Add로 시작하는 지시자들은 FancyIndexing과는
관련이 없다.
AddLanguage
ko .ko
AddLanguage
en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
AddLanguage는 문서의 언어를 명시한다. 내용 협상 과정을 통해 브라우져가 이해할 수
있는 언어의 문서를 제공하는 것이 가능하다. 접미어(suffix)는
언어 키워드와 꼭 같은 필요는 없다. 예를 들어 폴란드어(Polish)로 된 문서는 네트웍 표준 언어 코드가 pl 이지만 펄 스크립트와 확연히 구별하기 위해 "AddLanguage
pl .po"라고 사용한다.
LanguagePriority
ko en fr de
LanguagePriority는 내용 협상 중 동점이
발생하는 경우 언어 우선권을 부여한다. 언어의
우선권을 내림차순으로 나열하면 된다.
AddType
application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
AddType를 사용하면 mime.types 파일
수정없이 MIME 설정을 할 수 있고 또는 어떤
파일들에(확장자) 대하여 특정 타입으로 처리하도록 할 수
있다. 예를 들어, 확장자 PHP3 모듈(아파치 배포파일에 포함되어 있지 않다)에 대해서는 위와 같이 사용한다.
다음은 PHP/FI (PHP2)를 위한 것입니다.
AddType application/x-httpd-php .phtml
* MIME 타입에서 정식적인 subtype 이 부여되지
않은 데이터 형식은 x-로 시작하는 독자적인 명칭을 사용할 수있다 (예 : application / x-gzip). 한 vnd.로 시작 벤더
고유의 명칭을 사용할 수도있다 (예 : application /
vnd.ms-excel).
AddHandler
cgi-script .cgi
AddHandler는 파일확장자를 처리기(Handler)에 매핑(연결)시켜주게
된다.
AddHandler를 사용하면 특정 파일 확장자와 "처리기"를 연결하거나 특정 파일 타입에 특정 동작(action)을 연결할 수 있다. 서버에 내장되어 있거나
또는 Action 명령을 사용하여 추가할 수 있다.(아래 참고)
서버 측 포함(SSI) 또는
ScriptAlias 처리된 디렉토리 외부에 존재하는 CGI 스크립트를 사용하고 싶을 때는 다음 내용의 주석을
없앤다.
CGI 스크립트를 사용하기 위해:
AddHandler cgi-script .cgi
서버 처리 HTML 파일 사용하기 위해:
SSI(Server Side Include)문서를 인식하게 하기위한 설정이다. SSI코드가
들어가 있는 문서는 확장자가 *.shtml이다. 시스템의
날짜와 카운터등
CGI프로그램을 하지 않아도 HTML문서에서 단 몇줄로
CGI의 효과를 낼 수
있는 SSI기능을 인식하게끔 하는 설정이다.
"7장. 아파치와 SSI"편에서
자세히
설명되어 있다.
AddType text/html .shtml
AddHandler server-parsed .shtml
아파치의 send-asis HTTP 파일 기능을 사용하기 위해서는
다음 행의 주석을 없앤다.
AddHandler send-as-is asis
서버 처리 이미지 맵 파일을 사용하려면...
AddHandler imap-file map
type map을 사용하려면...
AddHandler type-map var
Format:
Action media/type /cgi-script/location
Format: Action handler-name /cgi-script/location
Action을 사용하면 매칭되는 파일이 호출될 때마다
그 미디어 타입에 맞는 스크립트를 시행시킬 수 있다.
빈번하게 사용되는 CGI 파일 프로세서에 대하여
반복적으로 URL을 사용하지 않아도 된다.
MetaDir
.web
MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리이름을
지정한다. 이
파일들은 문서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있다.
MetaSuffix
.meta
MetaSuffix는 메타정보를 포함하고 있는 접미어의
이름을 지정한다.
에러발생시
응답을 정의할 수 있는 방법을 3가지 나타내고 있다.
1) 보통의 텍스트
ErrorDocument 500 "The server made a boo boo.
주목: " 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않는다.
2) 지역적인 방향 전환
ErrorDocument 404 /missing.html
지역적 URL인 /missing.html로 방향
전환하기
ErrorDocument 404 /cgi-bin/missing_handler.pl
주목: 스크립트나 SSI로 방향 전환시킬 수
있다.
3) 외부 방향 전환
ErrorDocument 402 http://some.other_server.com/subscription_info.html
주목: 원래 요청과 관련있는 환경 변수의 상당수가 스크립트에
전달되지 못한다는 점을 알고 있어야 한다.
BrowserMatch
다음 지시자는 보통의 HTTP 반응 방식을 수정한다.
첫번째 것은 네스케이프 2.x 또는 그를 흉내내는 브라우져에 대하여 KeepAlive 기능을 쓰지 않도록 한다. 이
브라우져들은 KeepAlive 구현에 문제점을 갖고
있기 때문이다.
두번째 것은 HTTP/1.1을 잘못 구현하였고 301 또는 302 (redirect) 반응에 대하여 KeepAlive를 제대로 지원하지 못하는 마이크로소프트 인터넷 익스플로러 4.0b2를 위한 것이다.
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0
force-response-1.0
다음은 기본적인 1.1 반응도 제대로 처리하지 못함으로써 HTTP/1.1 스펙을
위반하고 있는 브라우져에 대하여 HTTP/1.1 반응을 하지 않도록 한다.
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
<Location
/server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 접근허용 IP 및
도메인
</Location>
서버의 상태를 점검할 수 있게하는 설정이다. 이는
"http://www.manualand.co.kr/server-status"와 같은 형식으로 서버의 상태를
점검할 수 있다. "6장. 아파치서버
모니터링"편에서 자세히 설명되어 있다.
여기서 지정한 "SetHandler server-status"의 설정으로
인해 서버
모니터링을 할 수 있는 것이다.
<Location
/server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 접근허용 IP 및
도메인
</Location>
이설정을 위해서는
mod_info.c가 적재되어야 하며, 이는
"http://www.manualand.co.kr/server-info"와 같은 방식으로 서버의 정보를
볼 수 있다. 위에서 설정한 server-status와
함께 실행중인 웹서버의
상태점검을 위한 것이다.
<Location
/cgi-bin/phf*>
Deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>
1.1 버전 이전의 오래 된 버그를 악용하려는 사람들이
있다는 보고를 받았다.
이 버그는 아파치 일부분으로 제공한 CGI 스크립트와 연관있다.
이 부분의 주석 처리를 없애면 이 버그를 악용하는 공격이 있을 때 phf.apache.org
상의 기록 스크립트로 방향 전환시킬 수 있다.
또는 support/phf_abuse_log.cgi 스크립트를 사용하여 여러분 직접 기록할 수도 있다.
<IfModule
mod_proxy.c>
ProxyRequests On
아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 한다. 즉
프락시서버 지시자로서 프락시서버를 on 시킨다.
<Directory
proxy:*>
Order deny,allow
Deny from all
Allow from .your_domain.com
</Directory>
ProxyVia On
HTTP/1.1 "Via:"헤드처리를
활성화시킬 것인지 비활성화 시킬것인지를
지정한다. Off, On, Full, Block중 하나가 올 수 있으며 Full은 서버버전을
포함하며, Block은 나가는 모든 것에 대해 Via:헤더를
제거한다.
CacheRoot
"/usr/local/apache/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
NoCache a_domain.com another_domain.edu joes.garage_sale.com
캐쉬 기능도 사용하기 위해서는 다음 행의 주석을
풀어준다:
(CacheRoot가 없으면 캐쉬하지 않음)
이 설정은 캐시기능을 활성화 하기 위한 것이다.
### Section 3: 가상호스트 설정
여러분의 시스템에서 여러개의 도메인이나 호스트네임을
설정하여
관리하고자 한다면 <VirtualHost>부분을 설정해 줘야 한다. 가상호스트에
대한 정보는 http://www.apache.org/docs/vhosts/를 참조해 보면
좀더
자세한 정보를 얻을 수 있다. 아파치를 실행할 때 '-S'옵션을
사용함으로써 가상호스트의 설정에 대한 점검을 할 수 있다. name-based 가상호스트를 사용하길
원한다면 적어도 한 개이상의 IP Address를 정의할 필요가 있다.
"4-2절의 내용"과 "10장.웹호스팅 서비스를 위한 가상호스트"편에서 자세히 설명되어
있다.
NameVirtualHost
12.34.56.78:80
NameVirtualHost 12.34.56.78
이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 개,
그리고 포트 번호)를 정의해주어야 한다.
<VirtualHost
www.manualand.co.kr>
ServerAdmin webmaster@manualand.co.kr
DocumentRoot /home/sspark/public_html
ServerName www.manualand.co.kr
ErrorLog /home/sspark/public_html/aw/error_log
CustomLog /home/sspark/public_html/aw/access_log common
</VirtualHost>
ServerAdmin은 해당서버의 관리자 전자우편이며,
DocumemtRoot는 해당서버의 홈디렉토리이며,
ServerName은 해당서버의 도메인이며,
ErrorLog는 해당서버의 에러파일 위치이며
CustomLog는 로그파일위치와 포맷을 지정한 것이다.
<VirtualHost
_default_:*>
</VirtualHost>
Default 가상호스트 설정으로 위에서 설정되지
않은 다른 모든 호스트에
대해서 응답을 하고자 할 경우 설정해 준다.