httpd.conf 파일은 Apache Web Server 설정에 필요한 파일이다.
rpm 을 이용하여 설치하였다면 아래의 경로에 파일이 있으므로 참고하길 바란다.
* 설정파일 : /etc/httpd/conf/httpd.conf
지금부터 httpd.conf 파일을 해부해보자. 해당 파일은 크게 세가지 형태로 세분화할 수 있다.
* Global Environment : 아파치 웹서버 전반적인 설정
* Main-Server configuration : 아파치 웹서버의 주 서버에 대한 설정
* Virtual Hosts : 아파치 웹서버로 구동하는 가상 호스트에 대한 설정
### Global Environment ###
※ 전반적인 설정에 대한 부분으로 아파치 웹서버에서 동작하는 모든 부분에 영향을 준다.
* ServerType : standalone
- 서버(데몬)의 구동방법으로는 "standalone"과 "inetd" 방식이 있는데, standalone 방식으로 동작하도록 설정
* ServerTokens : OS
- 추가예정
* ServerRoot : "/etc/httpd"
- 아파치 웹서버의 설치 경로를 나타낸다. 단, 절대경로로 지정한다.
아래쪽으로 설정하는 항목의 대부분 패스들은 이 경로에 대한 상대경로로 지정이 된다.
* PidFile : run/httpd.pid
- ServerType이 Standalone 일 경우만 유효하다. 아파치 서버의 프로세스ID 가 기록될 파일을 지정,
ServerRoot 를 기준으로 상대경로로 지정도 가능하며, "/"로 시작하는 절대경로도 지정 가능
* Timeout : 60
- 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 설정. (단위:초)
네트웍의 속도가 나쁠수록 수치 값은 높게 설정하는 것이 좋다.
* KeepAlive : Off
- 접속한 채로 요청이 없어도 연결을 지속시킬 것인지 여부 설정. 허용하지 않는 것이 좋다.
* MaxKeepAliveRequests : 100
- 클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의 개수를 지정. '0'은 제한없음.
* KeepAliveTimeout : 15
- 클라이언트가 접속을 유지한 상태로 아무 요청이 없을 경우 접속을 끊어줄 시간을 지정. (단위:초)
* Listen : 80
* Listen : 12.34.56.78:80
- 시스템의 기본값(local_IP, #80)이외에 다른 IP Address와 포트에 대해서도 연결할 수 있게 설정
- "httpd.conf" 파일 맨 뒤의 가상호스트(Virtual Host)를 설정하기 위해 필요
* Include : conf.d/*.conf
- httpd 가 동작될 때 참조할 설정파일의 위치를 정의한다.
- 현재 설정은 /etc/httpd/conf.d/ 경로안의 모든 conf 파일을 포함하여 실행되도록 설정되어 있으며
가능한 변경하지 않도록 한다.
* ExtendedStatus : On
- "server-status" 로 아파치 웹 서버의 상태를 모니터링 할 때 "자세히 정보보기" 기능을
제공할 것인지 설정(제공:on)
* User : apache
* Group : apache
- 아파치 웹 서버 데몬이 요청을 받았을 때 반환할 user와 group 을 설정
- Server Daemon 이 Standalone Type 방식으로 동작되고, 아파치의 실행이 root 권한으로 동작한 경우 유효하다.
### Main-Server configuration ###
아파치 웹서버의 주 서버가 사용할 값들을 지정한다.
<VirtualHost> 로 지정한 값이 아니면 모두 여기서 지정된 값이 기본값으로 적용된다.
* ServerAdmin : root@localhost
- 웹 페이지를 로딩시 에러가 출력될 경우 에러페이지내 출력될 관리자 정보(브라우저에 출력될 정보 입력)
- 대부분 해당 웹서버의 관리자 E-mail 주소를 입력하여 사용
* ServerName : localhost
- 클라이언트 브라우저의 주소창에 보여지는 호스트 이름을 지정
- 도메인도 가능하고 IP Address 도 가능하다.
- www를 쓰지않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있다.
ex) test.net2free.net(DNS 주소) 을 www.net2free.net(web주소) 으로 지정해서 쓰는 것과 같다고 볼 수 있다.
* DocumentRoot : "/var/www/html"
- 아파치 웹 서버의 웹문서가 있는 기본 경로를 지정
- 디렉터리명을 지정하는 것이므로, 경로의 가장 마지막에 "/"를 입력하지 않도록 한다.
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
- Directory 에서 사용할 옵션들을 지정한 부분게 되며, 아래의 옵션들을 더 사용가능하다.
[ None, All, Indexes, Includes, FollowSymlinks, ExeCGI, MultiViews ]
* UserDir : public_html
- 하나의 웹 서버에서 여러 사용자들의 홈페이지를 각각 관리할 경우 사용자들의 홈페이지 디렉토리 경로를 지정
- ex) bluetails 란 사용자의 홈페이지를 "http://www.net2free.net/~bluetails" 라고 가정했을때 그 페이지의
리눅스 경로는 "~bluetails/public_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>
- 여러 사용자의 홈페이지 기본경로(public_html)의 권한 대한 옵션을 지정
* DirectoryIndex : index.html index.html.var
- 설정 파일내 여러 항목들 중 디렉터리만을 지정하여 사용하는 부분이 참조할 기본 출력 파일을 정의
- 다수를 지정하고 싶을때는 띄어쓰기로 구분하며 순서대로 탐색을 하게 된다.(index.html index.php index.htm 등)
ex)- Browser -> http://www.net2free.net:9702
- Server 에서는 "DocumentRoot/DirectoryIndex" 형태로 출력시킬 파일을 찾아가게 된다.
* TypesConfig : /etc/mime.types
- 웹서버의 mime type을 설정한 파일을 지정
- mime.types 파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.
* DefaultType : text/plain
- mime.types 파일에 정의 되어있지 않은 파일 형식으로 요청을 받는 경우, 즉 알 수 없는 문서타입에
대한 기본적인 응답 mime 타입을 지정
* HostnameLookups : Off
- 웹 서버의 로그(access_log)를 지정하는 Format 에서 "DNS Lookup"으로 지정하였을 때,
domain 또는 IP Address로 남길 것인지 지정
- Default 설정은 IP Address로 남기게 되고, Domain 으로 설정(On)한 경우보다 속도가 조금 빠르다.
* ErrorLog : logs/error_log
- 아파치 웹서버의 에러로그 기록파일의 경로를 지정
- <VirtualHost>부분에서 Log 관련 항목을 설정하지 않는 경우는 위 설정된 경로로 로그가 기록되게 된다.
* LogLevel : warn
- 로그를 기록할 때 그 파일내 기록할 내용의 중요도를 설정
- 중요도는 " debug → info → notice → warn → error → crit → alert → emerg " 가 존재
- 중요도가 낮으면 기록량이 많아지는 단점이 있으므로 서버의 역할에 잘 맞추어 설정하도록 한다.
* CustomLog : logs/access_log common
- 임의의 로그 포맷을 지정하여 로그파일에 기록하기 위해 설정
- 형식은 [경로(파일명까지 입력)] [선언명]
- 아파치 1.3.9 이상 버전은 CustomLog 를 <VirtualHost>에서도 사용할 수 있게 제공한다.
=> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- 커스텀 로그로 사용될 형식을 지정하는 방법이다.
- 형식은 [ "기록형태" 선언명 ] 으로 지정
- 관리자는 원하는 정보를 지정해서 보기 위해 적당한 Format으로 여러개를 설정해두는 것을 추천한다.
* ServerSignature : On
- 서버가 생성하는 문서의 trailing footer line의 설정을 가능하게 한다.
- 문서의 형식은 "error documents", "FTP directory listings", "mod_status and mod_info output etc.",
"but not CGI generated documents" 등이 있음.
* Alias : /icons/ "/usr/local/apache/icons/"
- 이벤트용 페이지나 관리자 전용 페이지를 만드는 등 필요한 경우에 별칭을 주도록 제공한 항목
- 형식은 [ 별명 "리눅스 경로" ] 로 작성한다.
- 단, Alias 의 경우는 파일과 디렉터리 모두 지정이 가능하므로 "/" 기호에 대한 부분은 주의가 필요하다.
* ScriptAlias : /cgi-bin/ "/usr/local/apache/cgi-bin/"
- ScriptAlias는 Alias 와 근본적으로 같은 내용으로 형식도 동일하다.
- ScriptAlias는 지정한 리눅스 경로 안에 있는 파일을 서버가 실행되도록 설정하기 때문에 디렉터리만 지정하도록 권장
* IndexOptions : FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
- IndexOPtions는 웹 페이지상에서 디렉토리 목록을 출력할 때의 옵션을 지정
- Standard(볼품없는 기본 텍스트 형태), FancyIndexing(아이콘화 하여 아주 조금 더 예쁜 형태) 형식이 있다.
- 웹서버의 버전, 디렉터리명의 길이 무제한, HTML 형식의 테이블 출력, 문자인코딩(UTF-8) 형식으로 기본 지정됨.
- 아래의 내용은 IndexOptions 항목에서 "FancyIndexing" 의 경우 디렉토리 목록을 표시할 때
출력시킬 아이콘 및 문구를 지정하는 항목이다.
=> AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
- 내용이 인코딩 타입인 경우 위처럼 나타낸다.
- 형식은 [ "AddIconByEncoding" / "(형식,출력 아이콘 경로)" / "형식" ]
AddIconByType (TXT,/icons/text.gif) text/*
....
- 타입방식으로 선언시 위처럼 나타낸다.
- 형식은 [ "AddIconByType" / "(타입,출력 아이콘 경로)" / "형식" ]
AddIcon /icons/binary.gif .bin .exe
....
- 확장자 형태의 내용은 위처럼 나타낸다.
- 형식은 [ "AddIcon" / "출력 아이콘 경로" / "확장자" ]
=> DefaultIcon : /icons/unknown.gif
- "AddIcon..." 으로 지정한 항목이 아닌 경우 출력시킬 기본아이콘을 지정
=> AddDescription "GZIP compressed document" .gz
....
- AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 표시할 때 사용.
- 형식은 [ "AddDescription" / "표시할 설명" / "확장자" ]
* ReadmeName : README.html
- 디렉토리 목록표시 가장 하단에 보여줄 설명파일의 이름을 지정.(꼬리말과 유사)
* HeaderName : HEADER.html
- 디렉토리 목록표시 가장 상단에 보여줄 설명파일의 이름을 지정.(머리말과 유사)
* IndexIgnore : .??* *~ *# HEADER* README* RCS CVS *,v *,t
- 디렉토리 목록을 인덱싱할 때 제외할 파일명을 지정. (디렉터리 목록에 제외될 대상)
- 쉘 환경의 와일드카드(*, ?)가 허용.
* LanguagePriority : en ca cs da de .....
- 언어의 우선순위를 내림차순으로 지정한다. (AddLanguage 의 형식 명칭 참조)
=> AddLanguage en .en
.....
- AddLanguage 는 문서의 언어 형식을 지정.
- 형식은 [ "AddLanguage" / "형식명칭" / "확장자" ]
* Format: Action media/type /cgi-script/location
- Action 과 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록 설정
- 형식은 [ "Format: Action" / "매칭형식" / "연결스크립트" ]
* ErrorDocument
- 에러발생시 응답을 정의할 수 있는 방법을 정의한다. 3가지 기본 형태를 제공한다.
=> ErrorDocument 500 "The server made a boo boo.
- 일반적인 텍스트 형태로 출력
- 형식은 [ "ErrorDocument" / "에러코드번호" / "출력시킬 텍스트" ]
=> ErrorDocument 404 /missing.html
=> ErrorDocument 404 /cgi-bin/missing_handler.pl
- 또다른 페이지로의 연결 (지역적인 방향전환)
- 형식은 [ "ErrorDocument" / "에러코드번호" / "출력시킬 페이지 경로" ]
=> ErrorDocument 402 http://www.example.com/subscription_info.html
- 또다른 페이지로의 연결 (외부 방향전환)
- 형식은 [ "ErrorDocument" / "에러코드번호" / "외부로 출력시킬 페이지 경로" ]
### 가상호스트(VirtualHost) 설정 ###
하나의 Apche 웹서버에 여러개의 도메인이나 호스트네임을 설정하여 관리할 경우 설정.
Apche 웹서버 설정 파일내 "<VirtualHost> ~ </VirtualHost>" 부분에 정의하여 사용하고
가상호스트에서 설정한 내용은 주 서버 설정과는 별도로 인식되기 때문에 VirtualHost 부분에
설정한 내용이 적용받아 실행된다 볼 수 있다.
가상호스트에 대한 자세한 정보는 http://www.apache.org/docs/vhosts/ 를 참조하시기 바랍니다.
버추얼 호스팅에서는 두가지 방법이 존재한다.
ㄱ. 이름기반의 버추얼 호스팅
- 도메인을 사용하는 경우 하나의 도메인에 여러개의 호스트가 존재하는 형태로 출력되는 방법
- ex) www.net2free.net , blog.net2free.net -> 192.168.1.55
ㄴ. IP 기반의 버추얼 호스팅
- 하나의 웹서버가 두개의 아이피로 모두 연결이 가능하도록 설정하여 출력되는 방법
- ex) 192.168.1.55 , 192.168.1.150 -> www.net2free.net
위 2가지 방법 중 이름을 이용한 호스팅을 하기 위해서는 "NameVirtualHost" 가 정의 되어 있어야 가능하다.
또한 정의 IP 를 이용하여 선언하는 것을 추천한다.
* NameVirtualHost : *:80
* NameVirtualHost : 192.168.1.55
- 아래쪽에 선언하는 VirtaulHost 들의 name-base 역할을 할 서버를 지정.
- 형식은 [ "NameVirtualHost" / "IP:Port" ] 로 지정하고, 80번을 이용하는 경우는 Port 를 생략해도 무방.
* <VirtualHost www.net2free.net:80>
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>
=> <VirtualHost ServerInfo:Port>
- ServerInfo 부분은 도메인 또는 IP 를 이용하여 설정하고, Port 부분은 자신이 원하는 0~65535 중 설정한다.
(Port 는 방화벽 해제가 필수이다.)
- 현재 설정하는 VirtualHost 에만 적용되는 사항들로 설정하게 된다.
=> ServerAdmin
=> DocumemtRoot
=> ServerName
=> ErrorLog
=> CustomLog
- 근본적인 내용은 Main 설정 부분에서 안내한 내용과 동일하다.
</VirtualHost>
//////////////////////////////////// 기타 적용 가능 사항 /////////////////////////////////////////
* LockFile : logs/accept.lock
- 아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나 USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때
사용되는 LockFile의 경로지정시에 사용한다. 기본값으로 가능한 사용.
* ResourceConfig : conf/srm.conf
* AccessConfig : conf/access.conf
- 아파치 웹 서버의 환경설정 파일은 'httpd.conf' , 'srm.conf' , 'access.conf' 로 사용하는데 관리의 용이성을 위해
'httpd.conf' 내 위 항목으로 각 내용을 정의하여 사용한다.
- 3개의 파일 로딩 순서는 "httpd.conf > srm.conf > access.conf" 로 실행된다.
* MinSpareServers : 10
* MaxSpareServers : 20
- 성능향상과 빠른 응답속도를 위해 생성하는 유휴서버(서비스대기 중인 프로세스)의 개수를 설정하는 항목
- 유휴서버가 MinSpareServers의 개수(10) 보다 적으면 추가로 생성, MaxSpareServers의 개수(20)보다 많으면 세션만료
* StartServers : 5
- httpd 가 시작될 때 자식 프로세스의 갯 수를 설정. 시작시 동시에 띄우게 될 웹 데몬의 갯 수라 보면 된다.
- 데몬 동작 후 시스템의 상황에 따라 동적으로 변동되므로 큰 의미는 없다.
* MaxClients : 150
- 접근할 수 있는 클라이언트의 최대 갯 수 설정항목.
- 지정한 개수이상 클라이언트의 요청 발생시 아파치는 응답하지 않고 이 요청을 무시한다.(시스템의 자원 낭비 방지)
* MaxRequestsPerChild : 30
- 아파치 웹서버의 자식프로세스들에 대한 클라이언트의 요청 개수를 지정
- 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 해당 자식프로세스는 자동으로 죽게되고,
이 값을 0으로 설정하면 무제한으로 설정이 되므로 적절히 조절할 것.
* BindAddress : *
- 서버가 응답할 수 있는 IP Address를 설정
- 하나의 시스템에 있는 아파치 웹 서버 하나로 여러 웹 서버처럼 관리하는 웹 호스팅 서비스등에서 많이 이용.
- "*" 은 "모든 IP Address" 에 대해 응답, IP Address를 지정한다면 지정한 IP Address에 대해서만 응답
- 웹 호스팅 서비스를 하고자 한다면 여러개의 IP Address를 ISP로부터 할당받아 지정해 주면된다.
- "httpd.conf" 파일의 'VirtualHost' 부분에서 IP 기반 버추얼 호스팅을 하기 위해서 필수 설정 사항이다.
* Port : 80
- 아파치 웹 서버의 기본포트를 지정(특별한 경우가 아니면 기본 포트인 80 을 적용)
- 사용가능한 포트는 0 ~ 65535이며 1024이하의 포트 번호는 Well Known Port 라고 해서 시스템에서 예약되어
root 만 Listen 상태로 만들 수 있게 설정되어 있다. 그래서 1024 이상의 포트 번호를 지정해서 사용할 것.
- Port 를 9702 로 지정했다면, 웹 브라우저로 접근시 [ http://www.net2free.net:9702 ] 형태로 접속해야한다.
- 단, 80번은 default이므로 Port 번호를 생략할 수 있다.
위 기재된 모든 내용은 httpd.conf 파일내 모든 내용을 담고 있지는 않습니다. 추가로 궁금한 내용이 있거나 꼭 알아야 할 항목들이 있다면
위키피디아를 참조하시거나 문의를 남겨주세요^^