ServerType standalone
서버의 구동방법으로는 standalone과 inetd 방식으로 나눠진다. standalone은 웹 서버 클라이언트의 접속을 모두 처리하고, 응답속도가 빠르며, 주로 이 방식으로 사용한다. inetd 방식은 클라이언트의 접속요구가 있을 때마다 웹 서버를 구동하는 방식이다.
ServerRoot "/usr/local/apache"
아파치 서버의 홈 디렉토리를 지정하며 절대경로로 지정한다. 이후로 나오는 대부분의 경로들은 이 경로에 대한 상대경로로 지정한다. 환경설정파일, 에러로그파일 등의 상대경로의 기준이 되는 위치이다.
LockFile logs/accept.lock
아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나 USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때 사용되는 LockFile의 경로지정시에 사용되며, 가급적 기본값으로 사용한다.
PidFile logs/httpd.pid
PidFile 설정은 ServerType을 Standalone으로 설정했을 때만 유효하며, 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세스ID(PID)를 기록하는 파일을 지정한다. 당연히 아파치 서버가 재시작되거나 과부하로 인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도 변경된다. 즉 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치 서버의 프로세스번호(PID)값이 기록되고, ServerRoot를 기준으로한 상대경로로 지정된다. 절대경로로 지정하려면 "/"로 시작하는 절대경로를 적어주면 된다.
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개의 파일을 모두 읽고 난 뒤에 실행이 되기 때문이다. 만약 이 두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 "#"으로 주석 처리한다.
ResourceConfig /dev/null
AccessConfig /dev/null
Timeout 300
클라이언트의 요청에 의해 서버와 연결이 되었을 경우 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 초단위로 설정한다. 초기값은 1200이며 보통은 300초로 지정. 네트워크의 속도가 나쁠수록 수치 값은 높게 설정하는 것이 좋다.
KeepAlive On
접속한 채로 특별한 요청 없이 지속적인 연결을 허용할 것인지를 설정. 허용하지 않으려면 Off
MaxKeepAliveRequests 100
클라이언트가 접속된 시간 동안 아파치 서버에 요청할 수 있는 최대의 개수를 지정한다. 0을 지정하면 제한 없음을 의미하며, 서버의 성능향상을 위하여 가능한 높은 값이 좋다.
KeepAliveTimeout 15
아파치 서버는 같은 접속상태의 클라이언트에서 지정한 초만큼의 요청이 없었을 때 접속을 차단하게 된다.
MinSpareServers 5
MaxSpareServers 10
아파치 웹 서버는 성능향상과 빠른 응답속도를 위해 현재 서비스대기 중인 프로세스를 만들게 되는데 이 유휴서버의 개수는 시스템의 상황에 따라 달라지게 되며, 유휴서버가 MinSpareServers의 개수(5) 보다 적게 되면 추가로 생성을 하게 되고 MaxSpareServers의 개수(10)보다 많게 되면 프로세스를 종료하게 된다. 즉, 유휴서버의 개수를 적절히 조절하기 위한 것이다.
StartServers 5
아파치 웹 데몬이 시작할 때 동시에 띄우게 될 웹 데몬의 개수를 뜻하며, 웹 데몬이 구동되고 난 뒤엔 시스템의 상황(부하율 등)에 따라 대부분 합리적인 개수만큼 동적으로 생성되었다가 죽기도 하므로 큰 의미를 가지는 것은 아니다.
MaxClients 150
시스템의 자원을 아파치 웹 서버가 무한정 차지하는 것을 방지하기 위해 아파치 웹 서버에 접근할 수 있는 클라이언트의 최대개수 제한한다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면 아파치는 응답하지 않고 이 요청을 무시한다.
MaxRequestsPerChild 30
아파치 웹 서버의 자식프로세스들이 클라이언트의 요청 개수를 지정한다. 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이 자식프로세스는 자동으로 죽고, 이 값이 0으로 설정이 된다면 자식프로세스가 자동으로 죽는 일은 없을 것이다. 0아닌 다른 값으로 설정함으로써 프로세스의 수를 적절히 조절하여 시스템의 부하조절과 자원낭비를 어느 정도 방지 할 수 있다.
Listen 3000
Listen 12.34.56.78:80
시스템의 기본값 이외에 다른 IP 주소와 포트에 대해서도 연결할 수 있도록 설정해 준다. 환경설정파일(httpd.conf) 맨 뒤에 나오는 가상호스트(Virtual Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.
BindAddress
서버가 응답할 수 있는 IP 주소를 설정하며, 하나의 시스템에 있는 아파치 웹 서버 하나로 여러 웹 서버처럼 관리하는 웹 호스팅서비스 등에서 많이 이용하는 것으로 여러 IP 주소를 인식 ""으로 설정이 되었다면 모든 IP Address에 대해 응답할 수 있다. IP 주소를 지정한다면 지정한 IP 주소에 대해서만 응답할 수 있게 된다. 여러 개의 IP 주소를 ISP로부터 할당 받아서 웹 호스팅서비스를 하고자 한다면 이 부분에서 지정해 주면 된다. 이 설정파일의 맨 뒷부분에 나오는 ~부분의 IP bind 가상호스트부분에서 아파치 웹 서버가 응답할 수 있도록 하려면 여기서 IP 주소를 지정해 줘야 한다.
ExtendedStatus On
server-status로 아파치 웹 서버의 상태를 상태를 모니터링 할 때 자세한 상태정보 기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것이다.
아파치의 주 서버가 사용할 값들을 지정한다. 에 정의된 가상호스트들에서 지정하지 않는 것은 여기서 지정된 값이 기본값으로 적용된다. 또한 여기서 지정하는 값을 각 내에도 지정할 수 있으며 이 경우엔 각내에서 지정한 값이 우선 적용된다.
Port 80
아파치 웹 서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면 80번으로 설정한다. 사용 가능한 포트는 0 ~ 65535이며 1024이하의 포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른 포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다. 단, 80번은 default이므로 Port번호를 입력하지 않아도 도메인만으로 그냥 접근할 수 있다.
User nobody
Group nobody
아파치 웹 데몬이 요청을 받았을 때 여기서 지정한 User와 Group으로 응답을 하게 된다. 이 설정은 ServerType이 Standalone방식이며, 아파치의 실행이 root권한으로 실행이 되었을 때 유효한 것이다. 많은 웹 서버 관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody User가 없다면 새로 생성을 해야 할 것이다. 단, root로 설정하는 것은 절대로 있어서는 안되며 nobody 이외의 다른 시스템사용자 ID로 지정을 한다면 정말 신중하게 모든 면에서 깊게 고려 해봐야 한다.
ServerAdmin webmaster@www.domain.co.kr
여기서 지정하는 Email 주소는 웹 문서 로딩에러 등의 문제에서 클라이언트 측으로 보내질 메일주소 값이다. 대부분 웹 서버 관리자의 Email 주소로 설정을 한다.
ServerName new.host.name
클라이언트에게 보여주는 호스트이름을 지정한다. www를 쓰지 않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있다. 예를 들어 bbs.manualand.co.kr을 www.manualand.co.kr로 지정해서 쓸 수 있다. 이곳에 IP 주소를 적게 되면 클라이언트에는 IP 주소를 보여준다.
DocumentRoot "/usr/local/apache/htdocs"
아파치 웹 서버의 웹 문서가 있는 경로를 지정한다. 예를 들어 "http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의 절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 된다. 경로의 맨 마지막에 "/"를 추가해서는 안 된다. Alias를 사용하여 다른 위치를 지정할 수도 있다.
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
UserDir public_html
하나의 아파치 웹 서버에서 여러 사용자의 홈페이지를 별도로 만들어 관리할 때 필요한 개별 가입자의 홈페이지 디렉토리 이름이다. 예를 들어 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
디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게 될 문서의 순서를 지정해 준다. 여러 개의 파일을 지정할 수 있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를 들어 "DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을 찾아서 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을 찾아서 로딩해 준다.
AccessFileName .htaccess
디렉토리별로 접근 제어할 정보(ID, Password)를 담고 있는 파일을 지정한다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기 위한 것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에 접근하려고 할 때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근 허용하는 것이다. 보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸고 싶다면 ".htaccess"대신에 다른 이름을 적어주면 된다.
<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>
위의 옵션은 보안상의 이유로 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는 옵션이다. 만약 이 옵션을 주석 처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수 없을 것이다.
TypesConfig conf/mime.types
웹 서버의 mime.types파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.
DefaultType text/plain
mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때 알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.
HostnameLookups Off
웹 서버의 로그(access_log)를 지정하는 Format으로 "DNS Lookup"으로 지정하였을 때, Domain으로 남길 것인가, IP 주소로 남길 것인가를 지정한다. Default로 Off는 IP 주소로 남기는 것이며, On으로 설정한 것보다는 속도가 조금 빠르다. On으로 하게 되면 IP 주소를 Domain으로 변환해야 하므로 속도가 조금 느릴 수 있다.
ErrorLog logs/error_log
아파치 웹 서버의 에러로그 기록파일을 지정한다. 참고할 사항은 맨 마지막에 설정하는 부분에서 각 서버에 대한 에러파일을 지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게 되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.
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" referrer
LogFormat "%{User-agent}i" agent
CustomLog에서 사용할 몇 가지 로그형식의 별명을 정한 곳이다. 웹 서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 한다. 웹 서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는 곳이다.
ServerAdmin은 해당서버의 관리자 전자우편, DocumemtRoot는 해당서버의 홈디렉토리, ServerName은 해당서버의 도메인, ErrorLog는 해당서버의 에러파일 위치, CustomLog는 로그파일위치와 포맷을 지정한 것이다.
<VirtualHost _default_:*>
</VirtualHost>
Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에 대해서 응답을 하고자 할 경우 설정해 준다.