레퍼런스 : http://blog.paran.com/psycho/7981318
====== 자주쓰는 아파치 설정사항 정리 ======
===== 브라우징 제거 =====
아파치의 디폴트세팅은 브라우징이 enable되어 있다. 브라우징이란 웹브라우저에서 URL입력시 index.html과 같은 정확한 파일명을 생략하고 디렉토리만 적었을 경우, 디렉토리내 파일목록이 출력되는 현상을 말한다.
http.conf의 디렉토리 디렉티브내 다음줄 추가
Options -Indexes
===== 아파치 인증창 사용 =====
http.conf에서 인증을 걸 디렉토리 디렉티브내 다음줄 추가
AllowOverride AuthConfig
해당 디렉토리에 다음과 같이 .htaccess파일(텍스트파일) 생성
[root@ns mrtg]# cat .htaccess
AuthName "MRTG를 위한 인증"
AuthType Basic
AuthUserFile /webhosting/mrtg/.auth
require valid-user
AuthName: 인증창 타이틀
AuthType: 인증형태
AuthUserFile: 인증자들의 리스트를 가진 파일(htpasswd명령어로 생성)
-c(create)는 처음 파일을 생성할때 필요하다.
[root@ns mrtg]# htpasswd -c .auth kang
New password:
Re-type new password:
Adding password for user kang
[root@ns mrtg]# ls -l .auth
-rw-r--r-- 1 root root 19 May 3 16:54 .auth
===== 각 유저별 www 폴더에 브라우징 권한 부여 =====
chmod 711 /home/UserDir
chmod 755 /home/UserDir/public_html
======= 외부 IP접근제어 =====
http.conf의 디렉토리 디렉티브내 다음줄 추가
AllowOverride AuthConfig
Order Allow,Deny
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24
Allow from all
Deny from 에 접근차단할 ip대를 입력.
슬래쉬(/)뒤의 숫자들은 net mask지정(생략하면 single ip에 대한 차단)
위의 내용을 종합한 예는 다음과 같다.
Options -Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
Allow from all
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24
====== 가상호스트/Redirect =====
아래의 예는 dbakorea.pe.kr로 오면, www.dbakorea.pe.kr로 redirect시킨다.
본인은 아파치말고, packet filtering으로 처리하려했으나 실력부족과 게으름으로 인해 그만두었다.
ServerName dbakorea.pe.kr
Redirect / http://www.dbakorea.pe.kr
가상호스트의 전형적인예
ServerAdmin kang at dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea-mobile
ServerName mobile.dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-access_log common
ScriptAlias /cgi-bin/ /webhosting/dbakorea-mobile/cgi-bin/
DirectoryIndex login.html
====== 아파치 정보출력제어 =====
80포트로 telnet후 get / http/1.0하면 나오는 정보제어
ServerTokens Prod[uctOnly]
: Apache 만 보여줌
ServerTokens Min[imal]
: Apache 버젼만 보여줌
ServerTokens OS
: 아파치 버젼과 운영체제를 보여줌
ServerTokens Full (또는 지시하지 않았을때)
: 모두 보여줌
===== Offline Browser서비스 거부(출처: http://www.apache.kr.net) =====
WebZip만 테스트해봤지만 %{User-agent} 라는 변수에 'MSIE 6.0b'와 같이 찍힌다.
한마디로 안된다. 다른 용도로 사용될 지 몰라도,..
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from env=go_out
#CustomLog /usr/local/apache/logs/access_log common
#CustomLog /usr/local/apache/logs/referer_log referer
#CustomLog /usr/local/apache/logs/agent_log agent
CustomLog /usr/local/apache/logs/access_log combined
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
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
BrowserMatch "WebCopier" go_out
ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea
ServerName www.dbakorea.pe.kr
ServerAlias dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined
====== 아파치 로그 rotate =====
디폴트로 아파치로그는 wtmp, lastlog등과 같이 일정 시간, 크기..등등에 따라 로그의 순환이 이루어지지 않는다.
logrotate로 3개의 로그를 1달단위로 순환하려면 /etc/logrotate.conf파일의 마지막에 다음과 같이 추가한다.
# system-specific logs may be configured here
/usr/local/apache/log/www.dbakorea.pe.kr-access_log {
monthly
rotate 2
}
===== 바이러스등에 대한 아파치로그 제거 =====
# CodeRed Worm등의 로그제거
SetEnvIf Request_URI default\.ida CodeRed
SetEnvIf Referer \.ida CodeRed
SetEnvIf Request_URI cmd\.exe CodeRed
SetEnvIf Referer cmd\.exe CodeRed
SetEnvIf Request_URI root\.exe CodeRed
SetEnvIf Referer root\.exe CodeRed
ServerAdmin kang at dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea
ServerName www.dbakorea.pe.kr
ServerAlias dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined env=!CodeRed
====== 설치된 모듈 확인 =====
[root@ns /root]# httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_so.c
mod_setenvif.c
mod_php4.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
====== 설정파일 확인(Virtual Host Only by httpd -S) =====
===== 컴파일 설정보기 =====
[root@ns /root]# httpd -V
Server version: Apache/1.3.26 (Unix)
Server built: Sep 17 2002 00:36:53
Server's Module Magic Number: 19990320:13
Server compiled with....
-D HAVE_MMAP
-D HAVE_SHMGET
-D USE_SHMGET_SCOREBOARD
-D USE_MMAP_FILES
-D HAVE_FCNTL_SERIALIZED_ACCEPT
-D HAVE_SYSVSEM_SERIALIZED_ACCEPT
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/httpd.scoreboard"
-D DEFAULT_LOCKFILE="logs/httpd.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
-D ACCESS_CONFIG_FILE="conf/access.conf"
-D RESOURCE_CONFIG_FILE="conf/srm.conf"
[root@ns /root]#
===== SSI를 사용 =====
CGI와 거의 비슷하게 세팅한다.
아파치(Apache)의 설정파일은 이젠 httpd.conf하나로 통일되었으므로 이 파일에 모든 설정을 한다.
AddType text/html .shtml
AddHandler server-parsed .shtml
위의 2개를 꼭 있어야 한다. 그리고 CGI와 마찬가지로 ssi가 실행될 디렉토리에 Includes옵션을 설정한다.
아래의 예는 /www/htdocs/count라는 티렉토리에 CGI, SSI가 실행될 수 있게 한다.
# 내가 추가(Options에 ExecCGE는 CGI를 사용하기위해, Includes는 SSI를 사용하기 위해)
Options ExecCGI Includes
AllowOverride None
===== favicon.ico 에러 감추기 =====
vi {..}/httpd.conf
Redirect 404 /favicon.ico
ErrorDocument 404 "no favicon"