Mysql 비밀번호 변경 방법

 Mysql, 리눅스  Comments Off on Mysql 비밀번호 변경 방법
Aug 312010
 

## 1. root 비밀번호를 분실했을 경우

1) 암호 초기화
# killall mysqld (데몬을 모조리 죽입니다)

# cd /usr/local/mysql (mySsql 설치된 폴더 이동)
※ mysql 데몬이 죽었기 때문에, 의외로 이거 모르시는 분이 많은데 sql 명령을 넣으려면 sql이 설치된 디렉토리로 가야합니다.

# ./bin/safe_mysqld –skip-grant &
여기까지 진행하면 root 비밀번호가 초기화됩니다. 즉 root 비밀번호가 삭제되는거죠.

2) 새 암호 넣기

2.1) MySQL 3.x ~ 4.01

# ./bin/mysql (mysql 실행)

mysql>use mysql  <- mysql 데이타베이스 연결

mysql>update user set password=password(‘새암호’) where user=’root’;
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> FLUSH PRIVILEGES;    <- 끝에  ;  를 꼭 입력해야합니다.
Query OK, 0 rows affected (0.00 sec)

mysql> exit (끝내기)

2.2) MySQL 4.1 ~ MySQL 5.x
MySQL 4.1 이상 버전에서는 비밀번호를 해쉬알고리즘을 기반으로한 인증 프로토콜을 사용합니다.
그리고 해당 기능이 하위버전의 Client와 호환이 되지 않기에 서버를 4.1이상으로 업그레이드를 한 후에는 다음과 같은 명령어를 사용하여 인증이 가능토록 해야 합니다.

# ./bin/mysql (mysql 실행)

mysql>use mysql  <- mysql 데이타베이스 연결

mysql> update user set password=OLD_PASSWORD(‘새암호’) WHERE user = ‘root’;
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

## 2. 유저 로그인 경우 비밀번호 변경

$ mysql -u디비아이디 -p 디비이름
Enter password:

mysql>set password = password(‘새암호’);    <== 새로운 비밀번호로 저장하기
<추가설명>set password = old_password(‘새암호’);  <== 기존 비밀번호로 저장하기
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit  <== MySQL 빠져나올 때

Apache의 httpd.conf 설정하기

 리눅스  Comments Off on Apache의 httpd.conf 설정하기
Aug 312010
 

# vi /etc/httpd/conf/httpd.conf
##################################################
#
# 번역         : 이 만 용 <yong@linuxkorea.co.kr>
# 수정 및 추가 : 김 정 균 <admin at oops.org>
#
# 번역 상의 오류나 더 매끄러운 번역을 위한 제안 사항은 언제나 환영합니다.
#
#############################################################
#
# 문제가 발생했을 때에는 httpd.conf (srm.conf, access.conf) 설정 파일의
# 문법을 제대로 지켰는지 먼저 점검하고 다른 아파치 관리자들에게 도움을
# 요청하는 것이 좋습니다.
#
# /usr/sbin/httpd 명령에 -t 옵션을 주면 문법만 점검합니다.
# 기타 다른 옵션에 대하여 알고 싶을 때에는 -h 옵션을 사용하십시오.
#
# 예1) 문제가 없는 경우
#
# # /usr/sbin/httpd -t
# Syntax OK
#
# 예2) 설정에 실수가 있는 경우
#
# #/usr/sbin/httpd -t
# Syntax error on line 91 of /etc/httpd/conf/httpd.conf:
# ServerType must be either ‘inetd’ or ‘standalone’
#
#############################################################
# —
#
# 간단한 용어 정리)
#
# —
#
# Rob McCool 씨의 NCSA 서버 설정 파일에 기초한 것임.
#
# 이 파일은 아파치(Apache) 서버 주 설정 파일이다. 이 파일에 들어있는
# 설정 지시자(directive)를 통해 서버의 작동 방식을 지시한다.
# 각 지시자에 대한 자세한 정보를 원하면 http://www.apache.org/docs 를 참고하라.
#
# 정확한 이해 없이 대충 읽어나가는 일이 없도록 하자. 여기에 적은 내용을
# 그대로 여러분의 상황에 적용시키려 하지 말라. 다음 내용은 실제 지시
# 내용을 위한 힌트라고만 생각하자. 내용에 대하여 의문이 있을 때에는 온라인 문서를 참조하라.
# 이 사실에 대하여 지금 여러분에게 충분히 경고해 두었음을 밝히는 바이다.
#
# 아파치 서버는 이 파일을 읽고 난 후, /home/httpd/conf/srm.conf 파일을
# 처리하고 그 다음 /home/httpd/conf/access.conf 파일을 읽는다.
# 지금 현재 이 설정 파일 안에서 ResourceConfig, AccessConfig 지시자를 사용하여
# 설정 파일 이름을 바꾸면, 변경된 이름의 설정 파일을 읽는다.
# (여기서 /home/httpd 부분은 아파치 서버의 기본 디렉토리로 대체하여
# 생각하면 된다. 예를 들어 여러분이 직접 아파치를 컴파일하여 설치하는
# 경우에는 일반적으로 /usr/local/apache 가 된다. 컴파일하여 직접 설치할
# 때에는 패키지와 충돌되지 않도록 둘 중 하나만 사용하라.)
#
# 지시자는 3 개의 기본적인 섹션으로 묶여 있다:
#
# 1. 아파치 서버 프로세스의 전반적인 작동을 제어하는 지시자
# (‘global environment, 전체 환경’)
#
# 2. 가상 호스트에 의해 처리되지 않는 요청을 모두 처리하는 주 서버 또는
# 기본 서버의 작동을 제어하는 지시자.
#
# 이 지시자 내용은 모든 가상 호스트의 기본값이기도 하다.
# 3. 다른 IP 주소 또는 다른 호스트 이름에 대한 요청을 처리할 가상
# 호스트 설정
#
# 설정 파일과 로그 파일 이름 : 만약 파일 이름이 “/”로 (또는 Win32 버전의
# 경우 “드라이브명:/” ) 시작하면 주어진 파일 이름 그대로를 사용한다.
# 그러나 “/” 로 시작하지 않을 때에는 ServerRoot 의 값이 그 앞에 추가된다.
# 따라서 “logs/foo.log”는 ServerRoot 값 (예를 들어 “/usr/local/apache”)이
# 앞에 추가되어 서버는 최종적으로 “/usr/local/apache/logs/foo.log”를
# 사용한다.
#
#############################################################

### 섹션 1 : 전체 환경 (Global Environment) => 이곳 부터는 실제 아파치 서버의 중요한 설정부분입니다.

#
# 이 섹션에 적힌 지시자는 예를 들어 아파치 서버가 처리할 수 있는 동시
# 요청의 갯수라든지 다른 설정 파일의 이름 등 아파치 서버의 전반적인
# 작동에 영향을 미친다.
#
# 서버 유형(ServerType)은 inetd 또는 standalone 둘 중 하나이다.
# inetd 방식은 유닉스 플랫폼에서만 지원된다.
#
ServerType standalone

Server의 Type을 지정하는 것으로, standalone은 httpd 데몬 프로세스가 사용자의 요청을 처리하는 것이고,
inetd는 inetd 데몬프로세스가 처리하게 하는것이다.
web demon처럼 사용자의 query가 많을 때는 standalone이 더 효율적인 방법이다.

#
# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이 기록되는 디렉토리의 최상위 경로명.
#
# 주의! 만약 서버 루트를 NFS (또는 기타 네트웍 파일 시스템) 마운트된
# 곳에 두고자 한다면 LockFile 문서를 꼭 읽어보아야 한다.
# (<URL: http://www.apache.org/docs/mod/core.html#lockfile>;);
# 문서를 읽고 나면 앞으로 닥칠 지 모르는 몇 가지 문제점을 피할 수 있다.
#
# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!
#
ServerRoot “/etc/httpd”

Apache 설정 file에서 사용될 경로중 상대 경로의 기준을 위해서 정해진다.  Web의 Root directory와는 상관이 없다.  DSO의 지원으로 인하여 ServerRoot의 상대 경로를 주의있게 설정해야 한다.
Alzza 에서는 DSO module들의 절대 경로가 /etc/httpd/modules 가 되므로 아래의 DSO 쪽의 상대 경로와 틀어지지 않게 조심해야 한다.

#
# LockFile 지시자는 아파치를 USE_FCNTL_SERIALIZED_ACCEPT 또는
# USE_FLOCK_SERIALIZED_ACCEPT 옵션을 주고 컴파일한 경우, 잠금 파일을
# 경로를 지정할 때 사용한다. 이 지시자 값은 일반적으로 기본값이 되도록 놔둔다.
# 이 값을 바꾸는 경우는 로그 디렉토리가 NFS 마운트된 곳에 있는 경우로서
# 잠금 파일은 항상 네트웍 파일 시스템이 아닌
# 로컬 디스크에 저장되어야 하기 때문이다. 주 서버 프로세서의 PID 값이 자동으로 파일 이름 뒤에 붙는다.
#
LockFile /var/lock/httpd.lock

#
# PidFile: 서버가 시동될 때 자신의 프로세스 고유 번호를 기록할 파일
#
PidFile /var/run/httpd.pid

#
# ScoreBoardFile: 내부 서버 프로세스 정보를 기록하는데 사용하는 파일.
# 모든 아키텍쳐에서 꼭 필요한 것은 아니다. 하지만 필요하다고 생각하는
# 경우에는 하나의 아파치 프로그램을 두 번 이상 실행시키는 경우 값이
# 중복되지 않도록 해주는 것만 잊지 않으면 된다.
#
ScoreBoardFile /var/run/httpd.scoreboard

#
# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을 차례대로 읽어나간다.
# 나중에 있는 2 개의 파일은 현재 아무 내용도 없는 빈 상태로 배포되고 있다.
# 왜냐하면 모든 지시자를 그냥 하나의 파일에 적는 것이 더욱 명료하기 때문이다.
# 주석으로 처리되어 있는 값은 기본값이다. 서버가 이 파일 내용을 무시하도록 하기 위해서는
# “/dev/null” (유닉스의 경우) 또는 “nul” (Win32) 값을 지정한다.
#
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

#
# Timeout: 받기/보내기 타임 아웃 시간
# 웹 브라우저에게 타임아웃 신호를 보낸 때까지의 기다리는 시간 (단위: 초)
#
Timeout 300

클라이언트가 정보를 받을때까지 소요되는 대기시간의 최대값을 지정한다. 쉽게 말해서 요청한 url이 없을 경우 error message가 뜨기 까지의 시간이다. 네트워크가 응답이 늦을 수록 수치를 늘리는 것이 좋다.

# KeepAlive: 지속성(persistent) 접속을 허가할 것인가 말 것인가? => 한번 연결에 대하여 한번이상의 요청을 허용할 것인가 아닌가의 여부
# (한 번의 접속에서 여러 개의 요청을 처리할 것인가 여부)
# 허가하지 않기 위해서는 “Off”로 설정한다.
# 허가하지 않는 것과 허가하는 것과의 효율 차이는 매우 크다.
#
KeepAlive On

HTTP 1.0에서는 요청이 일어날 때마다 client와 Server간에 새로운 연결이 만들어 지는데 이 설정으로 인하여 하나의 연결에서 여러 요청이 가능하므로 요청을 처리하는 시간을 증진 시킨다. 이 기능을 끄려면 off로 한다.

필자의 경험상의 생각은 대형 site일 경우에는 이 기능을 끄기를 권장한다. 이 기능을 Off를 시킬 경우에 system의 부하가 상당히 늘어 나는 것을 느낄수는 있으나 Web상의 속도에서는 속도가 On일 경우보다 더욱 빠르다는 것을 체감할수 있다. 즉 Web Server만을 돌린다면 Off로 하는 것을 권장하며 여러 서비스를 할 경우에는 On으로 하라는 의미이다.
참고로 이런 것을 체험할 정도의 대형 서비스란 하루 웹로그가 1G이상 쌓이는 경우를 의미 하며 왠만한 site에서는 이 부분에 대해서 신경을 쓰지 않아도 상관이 없다.

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

접속된채로 특별한 요청이 없음에도 계속 연결을 유지시킬 수치를 지정 한다.
값이 너무 크면 하나의 client가 Server의 resource를 독점 할 수 있으므로 적당 하게 잡는 것이 좋다.

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

#
# Server-pool size regulation. Rather than making you guess how many
# server processes you need, Apache dynamically adapts to the load it
# sees — that is, it tries to maintain enough server processes to
# handle the current load, plus a few spare servers to handle transient
# load spikes (e.g., multiple simultaneous requests from a single
# Netscape browser).
#
# It does this by periodically checking how many servers are waiting
# for a request. If there are fewer than MinSpareServers, it creates
# a new spare. If there are more than MaxSpareServers, some of the
# spares die off. The default values are probably OK for most sites.
#
MinSpareServers 5
MaxSpareServers 20

httpd 데몬프로세스의 child 프로세스에 대해 MinSpareServers보다 작으면 새로운 프로세스를 생성하고, MaxSpareServers보다 많으면 여분의 프로세스를 죽이는 것을 지정한다.

#
# Number of servers to start initially — should be a reasonable ballpark
# figure.
#
StartServers 5

httpd 서버를 처음 실행시킬때, 여분의 프로세스를 생성시킬 수치를 지정한다. 반응 시간을 짧게 하기 위해 StartServers항목에서 말하는 만큼의 Server process를 이미 만들어 두는 것인데, 실제로 Service를 하고 있지 않을 경우에는 잠자고 있으므로 System에 부하를 주거나 하지는 않는다.

#
# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect — if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# the system with it as it spirals down…
#
MaxClients 150

동시에 접속할 수 있는 Client의 수를 지정한다.

#
# MaxRequestsPerChild: 각 자식 프로세스가 죽기 전까지 처리할 수 있는 요청 갯수.
# 한 프로세스가 너무 오랫 동안 사용되면 메모리누출이나 자원 누출
# (아파치 때문에 또는 잘못된 라이브러리 때문에) 이 발생할 수 있으므로 자식 프로세스는 자동으로 죽는다.
# 대부분의시스템에서는 필요치 않으나 솔라리스에서와 같이
# 라이브러리에서의 자원 누출 현상을 막기 위해 필요하다.
#
MaxRequestsPerChild 1000

child 프로세스가 응답할 수치를 지정한다. 대부분의 system에서는 이 기능이 필요 없다.
다만 Solias와 같은 몇몇의 system에서는 이 기능을 지정해 줘야 하는 듯 하다.

#
# Listen: 아파치를 기본값 이외에도 특정 IP 주소 또는 포트에 연결하도록
# 해준다. <VirtualHost> 지시자도 참고하라.
#
#Listen 3000
#Listen 12.34.56.78:80
Listen 80

Virtual host설정에 관한 부분이다. Virtual Host에 관한 사항은 Name Server와 관련이 있으므로 따로 강좌를 하게 될 것이다.

#
# BindAddress: 이 옵션을 사용하여 가상 호스트를 지원할 수 있다.
# 이 지시자를 이용하여 서버가 귀기울일 IP 주소를 지시할 수 있다.
# “*”, IP 주소, 또는 완전한 인터넷 도메인 이름을 사용할 수 있다.
# <VirtualHost>, Listen 지시자도 참고하라.
#
#BindAddress *

하나 이상의 IP address가 있는 Server에서 사용한다. Server가 어떤 address에서 요청을 기댜려야 할지 정한다. Default로 주석 처리 되어 있어 Server가 모든 address를 청취한다. Default로 나두면 된다.

#
#동적 공유 객체(Dynamic Shared Object, DSO) 지원
#
# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련된
# 지시자를 사용하기에 앞서 알맞게 `LoadModule’ 지시자로 모듈을
# 지시해주어야 한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은
# 아파치 1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는
# httpd 바이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을
# 알고 싶을 때에는 `httpd -l’ 명령을 실행한다.
# *주의* 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이
# 아무렇게나 순서를 바꾸지 말라.
#
# 예 :
# LoadModule foo_module modules/mod_foo.so
#
# 모듈 관련 문서는 HTML 형식으로 “/home/httpd/manual/mod” 에 놓아두었다.
#
# *주의* LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라
# 나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.
#
#LoadModule mmap_static_module modules/mod_mmap_static.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule env_module modules/mod_env.so
LoadModule config_log_module modules/mod_log_config.so
LoadModule agent_log_module modules/mod_log_agent.so
LoadModule referer_log_module modules/mod_log_referer.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so
LoadModule includes_module modules/mod_include.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule asis_module modules/mod_asis.so
LoadModule imap_module modules/mod_imap.so
LoadModule action_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule anon_auth_module modules/mod_auth_anon.so
LoadModule db_auth_module modules/mod_auth_db.so
#LoadModule digest_module modules/mod_digest.so
#LoadModule proxy_module modules/libproxy.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule example_module modules/mod_example.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule bandwidth_module modules/mod_bandwidth.so
#LoadModule put_module modules/mod_put.so

#
# 다음 모듈은 아파치 펄 모듈로서 CGI 스크립트로 펄을 많이 사용하는
# 사람들에게 펄 코드 실행 속도의 향상을 가져다 줍니다.
#
# 주의 : 설정을 바꾼 후 한 가지 할 일이 더 있다.
# <Location /perl> … </Location>
# 위와 같은 설정을 찾아서 펄 스크립트를 사용할 수 있는
# 디렉토리를 설정해주어야 한다.
#
<IfDefine HAVE_PERL>
LoadModule perl_module modules/libperl.so
</IfDefine>

#
# 확장 모듈
#
<IfDefine HAVE_PHP>
LoadModule php_module modules/mod_php.so
</IfDefine>

#
# 다음 모듈은 MySQL 데이터베이스와 더불어 서버 스크립팅 언어로 인기를
# 누리고 있는 PHP3 모듈입니다.
#
<IfDefine HAVE_PHP3>
LoadModule php3_module modules/libphp3.so
</IfDefine>
<IfDefine HAVE_PHP4>
LoadModule php4_module modules/libphp4.so
</IfDefine>
<IfDefine HAVE_DAV>
LoadModule dav_module modules/libdav.so
</IfDefine>
<IfDefine HAVE_ROAMING>
LoadModule roaming_module modules/mod_roaming.so
</IfDefine>
<IfDefine HAVE_SSL>
LoadModule ssl_module modules/libssl.so
</IfDefine>

#
# 모듈 실행 순서를 정확하게 하기 위해 사용 가능한 모듈(정적 또는 공유
# 모듈 포함)로부터 완전한 목록을 다시 만들어 둔 것이다.
# [LOADMODULE 섹션을 하나라도 수정했다면 이 부분도 역시 알맞게 수정하라]
#
ClearModuleList
#AddModule mod_mmap_static.c
AddModule mod_vhost_alias.c
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_log_agent.c
AddModule mod_log_referer.c
#AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
#AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
#AddModule mod_digest.c
#AddModule mod_proxy.c
#AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
#AddModule mod_usertrack.c
#AddModule mod_example.c
#AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c
#AddModule mod_bandwidth.c
#AddModule mod_put.c
<IfDefine HAVE_PERL>
AddModule mod_perl.c
</IfDefine>
<IfDefine HAVE_PHP>
AddModule mod_php.c
</IfDefine>
<IfDefine HAVE_PHP3>
AddModule mod_php3.c
</IfDefine>
<IfDefine HAVE_PHP4>
AddModule mod_php4.c
</IfDefine>
<IfDefine HAVE_DAV>
AddModule mod_dav.c
</IfDefine>
<IfDefine HAVE_ROAMING>
AddModule mod_roaming.c
</IfDefine>
<IfDefine HAVE_SSL>
AddModule mod_ssl.c
</IfDefine>

#
# ExtendedStatus 지시자는 “server-status” 처리기가 호출되었을 때
# 아파치가 “매우 자세한” 상태 정보를 생성시킬 것인지
# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를
# (ExtendedStatus Off) 제어한다. 기본값은 Off 이다.
#
#ExtendedStatus On

#############################################################

### 섹션 2: ‘주(Main)’ 서버 설정

#
# 이 섹션에 있는 지시자는 <VirtualHost> 정의에 의해 처리되지 않는
# 모든 요청에 응답할 ‘주’ 서버가 사용할 값을 정한다.
# 이 값들은 또한 이 파일 뒷 부분에서 정의할 모든 <VirtualHost>
# 컨테이너의 기본값을 제공하기도 한다.
#
# 여기 나오는 모든 지시자는 <VirtualHost> 컨테이너 안에서도 사용할
# 수 있으며 그 안에서 사용되면 해당 가상 호스트에 대하여 전체
# 기본값을 무시하고 새롭게 정한 값이 채택된다.
#
#
# 만약 ServerType (‘Global Environment’ 섹션에서 설정)이 “inetd”인
# 경우, inetd 설정 내용을 따르기 때문에 다시 몇 가지 지시자는
# 아무런 효력을 발휘하지 않는다.
# ServerAdmin 지시자까지 그냥 건너뛴다.
#
#
# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.
# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는
# root 권한으로 실행되어야 한다.
#
Port 80

시스템에 의해 미리 httpd를 위해 예약된 포트 번호는 80번이다.
0에서 1023까지의 포트번호는 시스템에 의해 미리 예약되어 있다.
그 이상의 포트번호를 지정하여 일반사용자도 httpd을 설치, 운영가능하다.
http://aaa.bbb.ccc:8080/ 등으로 사용할 수 있다.
만약 Server type을 Inetd로 했다면 /etc/services에서 지정을 해 줘야 한다.

#
# httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은
# httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자
# 권한으로 전환해야 한다.
#
# User/Group: httpd가 실행된 권한의 사용자/그룹의 이름(또는 #번호).
# . SCO (ODT 3)에서는 “User nouser”와 “Group nogroup”을 사용한다.
# . UPUX 에서는 nobody로 실행하는 경우 공유 메모리를 사용할 수
# 없을 것이다. 이 때는 www 등의 사용자를 만들고 그 사용자 권한으로
# 실행되도록 한다.
# 주의) 몇몇 커널들은 60000 이상의 (unsigned) 그룹 값을 설정하면
# setgid(Group), semctl(IPC_SET) 함수를 거부한다.
# 이런 시스템에서는 Group #-1을 사용하지 말라!
#
User nobody
Group nobody

이 항목은 Default로 나두기를 권한다. 지정한 사용자와 그룹이 존재 하지 않으면 서버가 동작하지 않기 때문이다. 굳이 설명을 하자면 이 설정은 ServerType이 standalone일 때만 적용되는 것으로, 서버가 사용자의 요청에 대해서 생성하는 child httpd 프로세스에 대한 user id, group id 이다. 일반적으로 시스템에서 사용하지 않는 것들로 지정하는 것이 바람직하다.

#
# ServerAdmin: 서버에 문제가 발생했을 때 메일을 보낼 메일 주소.
# 이 주소는 예를 들어 에러 문서와 같이 서버가 생성하는 페이지에
# 나타날 것이다.
#
ServerAdmin admin@yourdomain.co.kr

#
# ServerName은 클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우
# 호스트 이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제 이름이
# 아닌 ‘www’를 사용하도록 하는데 사용할 수 있다.)
#
# 주의: 호스트 이름을 아무렇게나 만들어선 안된다. 이 이름은 여러분의
# 호스트에 주어진 타당한 DNS 이름이어야 한다. 잘 모르겠으면 네트웍
# 관리자에게 문의하라.
# 호스트가 등록된 DNS 이름을 갖고 있지 않는 경우에는 이 곳에 IP 주소를
# 적는다. 어찌 되었든 IP 주소를 사용하여(예를 들어 http://123.45.67.89/)
# 접속할 수 있다. 이런 식으로 해서 리다이렉션이 작동하도록 할 수 있다.
#
#ServerName localhost

서버의 도메인 네임을 지정한다. 자신의 서버가 도메인 네임을 가지지 않았다면 ip address로라도 꼭 적어 주어야 계정 접속을 할때 ~account 뒤에 “/”를 붙이지 않고 접속을 할수가 있다.
도메인 이름을 가지고 있다면 주의할 것은 꼭 실제로 존재하는 URL 이어야 한다는 것이다.

#
# DocumentRoot: 제공할 문서의 상위 디렉토리.
# 기본적으로 모든 요청은 이 디렉토리로부터 처리된다. 하지만
# 심볼릭 링크나 앨리어스(alias)를 사용하여 다른 위치를 가리키도록
# 할 수 있다.
#
DocumentRoot “/var/www/html”

웹 문서의 기본 directory이다. 보통 우리가 url을 쳤을때 접속되는 최초의 directory이다.
소스로 apache server를 설치했을 경우에는 default로 /usr/local/apache/htdocs이며
알짜 RedHat에서는 /home/httpd/html 이다.
참고로 이전 버전의 apach를 소스로 compile을 했을 경우에는 /usr/local/etc/httpd/htdocs 가 된다.
1.3.4 부터 위와 같이 변경이 되었다. “@@ServerRoot@@ 를 이용하여 ServerRoot 인자의 directory 경로의 값을 변수와 같이 사용 할 수도 있다.

#
# 아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와
# 기능을 허용할 것인지 거부할 것인지 여부를 설정할 수 있다.
# 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도 영향을 미친다.
#
# 우선, “기본값”을 매우 제한적인 상태로 설정한다.
#

<directory> tag에 의하여 각 directory마다 적절하게 permission을 걸수가 있다.

<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from env=no_access
</Directory>

“Deny from env=no_access” 설정에 대해서는 뒤에 다루기로 한다.

#
# 이 곳부터 허용할 특정 기능을 알맞게 설정해나간다는 사실을
# 주목하자. 여러분이 기대한 대로 작동하지 않는 것이 있다면 그
# 기능을 가능 상태로 설정해두었는지 점검하기 바란다.
#

#
# 다음 내용은 여러분이 설정한 DocumentRoot 값으로 변경해서
# 사용한다.
#
<Directory “/var/www/html”>
# => 브라우저에서 도메인 주소를 쳤을 경우 index.html파일이 위치하는 디렉토리

#
# 다음 값에는 “None”, “All”, 또는 “Indexes : index.html이 없을 경우
# 디렉토리를 보여 줄 것인지를 결정”, “Includes : 서버측의 SSI를 허용할 것인지를 결정”,
# “FollowSymLinks : 서버가 디렉토리의 심볼릭 링크를 따를 것인가를 결정”
# “ExecCGI :cgi프로그램을 실행 시킬건질 결정”, “MultiViews”의 자유로운 조합이
# 가능하다.
#
# “MultiViews” 만큼은 “Options All”을 사용한다 할 지라도 명시적으로
# 적어야만 작동한다는 사실을 알아두자.
#
#  Options Indexes FollowSymLinks   #수정전
Options -Indexes Includes FollowSymLinks    # 수정후

지정할수 있는  옵션의 예이다.

None 어떤 옵션도 이용할 수 없다.
All 지정한 directory에서 모든 명령을 이용할 수 있다.
Indexes URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 디렉토리의 파일 목록을 보여주는 옵션.
-Indexes URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 에러메시지를 보여줌.
Includes 서버측의 추가적인 정보를 제공할 수 있게 한다.
IncludesNoExec 서버측의 추가적인 정보를 제공할 수 있게 하지만, 어떠한 실행 파일을 실행하는 것을 방지한다.
FollowSymLinks 디렉토리상의 심볼릭 링크를 사용가능하게 한다.
ExecCGI CGI 스크립트를 실행할 수 있게 한다.
MultiViews All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용한다.

#
# 다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤 옵션을
# 마음대로 제어할 수 있는지 결정한다.
# “All” 또는 “Options”, “FileInfo”, “AuthConfig”, “Limit”의 자유로운
# 결합이 가능하다.
#
AllowOverride None

.htaccess파일은 서버의 각 디렉토리에 만들어서 각 디렉토리에 대한 접근을 제어하기 위한 것으로 디렉토리에 .htaccess파일이
있으면, 서버 전체에 작용하는 access.conf 보다 우선권을 가진다.

.htaccess파일에 대한 Override에 대한 옵션이다. 가능한 옵션은 다음과 같다.

None .htaccess파일을 읽을 수 없게 한다.
All 모든 지정에 대해 가능하게 한다.
Options 규정된 디렉토리 형식을 콘트롤하는 지정의 사용을 허락한다.
FileInfo 문서형식을 콘트롤하는 지정의 사용을 허용한다.
AuthConfig 사용자 인증 지정의 사용을 허용한다. 사용자 인증 변수를 사용한다.
Limit 호스트 접근을 콘트롤하는 지정을 허용한다.

#
# 서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.
#
Order allow,deny
Allow from all
Deny from env=no_access</Directory>

Limit에 관련된 부분을 설정을 한다.

order : 서버가 access control을 수행하는 순서를 나타낸다. 여기서는 allow기능을 먼저 수행하고, deny기능을 수행하라는 것이다.

deny, allow – deny 지시자 부터 검사하고 allow 지시자를 검사
allow, deny – allow 지시자 부터 검사하고 deny 지시자를 검사
mutual-failure – allow목록에 없는 모든 host에게 접속을 거부

allow from : 나열되는 주소들에 대한 access control을 가능하게 한다.
사용 가능한 주소는 도메인 네임, 호스트 이름 주소, 호스트 ip
주소, ip 주소의 앞부분 3바이트, 모든 주소에 해당하는 all
이 있다.
deny from : allow from과 반대되는 개념이며, 사용가능한 주소는 allow from과 같다.
require : 사용자, 그룹에 대한 접근을 통제할 수 있다.
사용방법 : require entity en1 en2 … enn
entity에 들어갈 수 있는 것은 user, group, valid-user의 세가지이다.
user : 지정된 사용자들에게만 접근을 허용하는 것으로, 지정된 사용자에
대한 정보는 AuthUserFile에서 지정한 파일에 있다.
group : 지정된 그룹에게만 접근을 허용하는 것으로, 지정된 그룹에 대한
정보는 AuthGroupFile에서 지정한 파일에 있다.
valid-user : AuthUserFile에 있는 모든 사용자에 대해 접근을 허용한다.

#
# UserDir: ~user 요청을 받았을 때 사용자의 홈 디렉토리 뒤에 추가할
# 디렉토리 이름.
#
#

# 주의 : 알짜 리눅스 시스템에서는 사용자가 자신의 홈 디렉토리에 public_html
# 디렉토리를 만들어도 외부에서 홈 페이지를 볼 수 없다.
# 왜냐하면 각 계정 홈 디렉토리에 대한 보안을 중요하게 생각했기 때문에
# 홈 디렉토리에 대하여 사용자 계정과 사용자 자신의 그룹 이외에는
# 아무런 접근 허가권도 갖고 있지 않기 때문이다. =>
# 초기의 계정 디렉토리의 퍼미션은 644입니다.
#
# 개인 홈 디렉토리를 가질 사람은 chmod a+x ~ 명령을 일단 실행해주어
# (보통) nobody 권한의 아파치 프로세스가 홈 디렉토리에 접근할 수
# 있도록 허가해주어야 한다.
# 물론 public_html과 홈 페이지 파일에 대하여 모든 사용자가 최소한
# 읽기 권한은 갖도록 설정해주어야 한다.
#
UserDir public_html www web htdocs

계정 사용자들의 home directory를 지정한다.
보통 http://url/~계정 이런식으로 접속했을때 계정에 이곳에 지정된
이름의 directory를 만들고 home directroy로 사용하면 된다.
보통 public_html 이나 htodcs, home 을 많이 쓴다. 다른 이름으로 해도 상관은 없다.
계정 사용자가 사용을 못하게 하려면 DISABLED 옵션을 주면 된다.

참고를 할것은 RedHat 계열에서는 user를 생성을 하면 user의 home
directory는 700의 권한을 갖게 되므로 httpd.conf에서 아무리 설정을
해 줘도 forbidden error만 만나게 된다. 그러므로 계정에서 homepage를
운영하기 위해서는 꼭 chmod a+x ~accountname 명령을 실행을 해 줘야 한다.

#
# UserDir 디렉토리에 대한 접근을 제어한다. 다음은 사용자 홈 페이지에
# 대하여 읽기만 가능하도록 한 예제 설정 내용이다. 참고 자료로
# 사용하기 바란다.
#
#<Directory /*/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>

위의 설정중 “*” 사용에 관해서 언급을 할것이 있다. 보통 “*”는 all의 의미로 많이 사용이 된다.
즉 위에서 /*/public_html 은 어떠한 경로에 있는 모든 public_html을 뜻한다고 할수 있다.
하지만 이는 그렇게 호락호락하게 되지는 않는듯 하다.
필자의 경험에 의하면 같은 레벨의 깊이에 있는 public_html 만 적용이 되는듯 하다.
즉 위의 설정대로라면 /home/public_html은 적용이 되지만
/home/oops/publci_html 은 적용이 되지 않더란 말이다.

#
# DirectoryIndex: 준비된 HTML 디렉토리 인덱스로 사용할 파일이나
# 파일 목록의 이름을 나열한다. 여러 개를 나열할 때는 스페이스로
# 구분한다.

DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi

특정 파일을 지정하지 않고 디렉토리만 지정했을 때 불러들일 문서를 지정한다.
앞에서 부터 써나간 대로 지정된 file이 있는지 확인을 하고 없으면 그 다음으로 지정한 file을 찾는다.

#
# AccessFileName: 디렉토리에 대하여 접근 제어 정보 내용을
# 담고 있을 파일 이름
#
AccessFileName .htaccess

서버가 디렉토리를 출력할 때 참고할 파일을 지정한다. directory user들은
그 directory에 .htaccess라는 file에 지시자를 넣어 srm.conf의 설정을 덮어 쓸수 있다.
인증을 시도하기 위하여 참조하는 file이라고 생각하면 된다. <Directory> tag 에 관련 분이 설명되어 있다.

# 다음 행은 웹 브라우져가 .htaccess 파일을 접근할 수 없도록 하는
# 설정이다. .htaccess에는 인증 정보가 들어있는 경우가 빈번하므로
# 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다.
# 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라.
# 만약 AccessFileName 설정을 다른 파일명으로 바꾸었다면 알맞게
# .htaccess를 그 이름으로 바꾸어준다.
#
<Files ~ “^.ht”>
Order allow,deny
Deny from all
</Files>

이 설정 역시 1,3,4에서 부터 새로 추가된 설정이다. .htaccess에 접근을 하여 password file을 훔쳐가려고 하는 것을 미연에 방지
하기 위하여 file 자체에도 permission을 걸수 있도록 해 놓았다.
문법은 <directory> tag에서 설명을 한 limit 문법과 동일하다.

위의 설정은 정규 표현식(RegEx)을 이용한 것으로 .ht로 시작하는 모든 파일을 의미한다.

#
# CacheNegotiateDocs: 기본적으로 아파치는 내용에 따라 협상된 문서에
# 대해서는 “Pragma: no-cache” 내용을 전송한다. 이 행은 프록시 서버로
# 하여금 문서를 캐쉬하지 않도록 요청한다. 다음 행의 주석을 풀면
# 이 기능을 해제하고 모든 프록시가 문서들을 캐쉬할 수 있도록 한다.
#
#CacheNegotiatedDocs

이 설정은 Proxy Server를 거치는 사용자들을 위한 것이다.
Proxy Server가 “교섭” 문서, 즉 CGI script의 출력이나 Server가 생성한
index page처럼 직접 수신되지 않는 문서를 cache 하도록 한다.
Default로 주석 처리 되어 있고 그냥 이대로 두면 된다.

#
# UseCanonicalName: (1.3 버전에 새롭게 등장) 이 설정을 켜두면,
# 아파치가 자기 참조 URL(반응이 오고 있는 서버를 다시 가리키는
# URL)을 만들 필요가 있을 때마다 “공식적인” 이름을 만들기 위해
# ServerName과 Port를 사용한다. 그렇지 않으면 아파치는 가능한 한
# 클라이언트가 제공한 호스트이름:포트 값을 사용한다.
# 이 설정은 CGI 스크립트의 SERVER_NAME, SERVER_PORT에도 영향을
# 미친다.
#
UseCanonicalName On

#
# TypesConfig 는 mime.types 파일 또는 이에 해당하는 파일을 찾을
# 위치를 결정한다.
#
TypesConfig /etc/mime.types

#
# DefaultType이란 파일 확장자와 같은 것을 통해 MIME 타입을 알 수 없는
# 문서에 대하여 사용할 기본 MIME 타입을 말한다. 여러분의 서버에 주로
# 텍스트나 HTML 문서가 많다면 “text/plain”을 쓰는 것이 좋다.
# 대부분이 실행 프로그램이나 이미지 등 바이너리인 경우에는
# 웹 브라우져가 텍스트라고 생각하여 바이너리 파일을 화면에 표시하지
# 않도록 하기 위해 “application/octet-stream”를 적는다.
#
DefaultType text/plain

Server가 갖고 있지 않은 MIME type의 확장자가 있는 file을 client가 요청 했을경우
DefaultType의 MIME type이 사용된다. file 확장자에서 MIME type으로의 map은 AddType 지시자로 추가할
수도 있다.

#
# mod_mime_magic 모듈을 사용하면 파일의 내용을 가지고 파일의 타입에
# 힌트를 얻는다. MIMEMagicFile 지시자를 사용하여 모듈에게 힌트
# 정보가 저장되어 있는 파일을 설정한다.
# mod_mime_magic은 기본 서버의 일부가 아니다.(따라서 LoadModule
# 설정을 사용하여 모듈을 추가해야 한다.) 또는 서버를 다시 컴파일해서
# mod_mime_magic을 추가해야 한다. 그렇기 때문에 <IfModule> 컨테이너에
# 포함되어 있는 것이다. 다음 설정은 모듈이 서버에 포함되어 있을 때에만
# MIMEMagicFile 지시자를 처리하도록 해준다.
#
<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/share/magic
</IfModule>

이것 역시 1.3.12에서 부터 새로 추가된 module이다. 사용을 하기 위해서는
DSO 설정에서 mod_mime_magic line의 주석을 해제해야 한다.

#
# HostNameLookups: 클라이언트의 이름 또는 IP 주소만을 기록할 지 여부.
# 예를 들어 www.apache.org (on) 또는 204.62.129.132 (off)
# 기본값이 off 인 이유는 각 클라이언트 요청이 올 때마다 최소한 1 번
# 이상의 네임 서버 요청이 발생하기 때문이다. 그러나 꼭 필요한 경우에는
# 이 기능을 켜둔다.
#
HostnameLookups Off

웹서버에 대한 접근을 도메인네임이나 ip주소 (on) 또는 ip주소
만으로(off) 접근하게 할 것인지를 결정하는 것이다.
Apache 1.3.4 부터 이 기능은 default가 off로 변경되었다. 이것이 off로
설정되어 있다고 해서 도메인으로 접근을 못하는 것은 아니다.
다만 webserver에서 해당 request에 대한 도메인을 해석을 할것인지 안할 것인지를 지정하는 것이므로
그리 걱정은 하지 않아도 상관이 없다.
대표적인 예로는 on으로 되어 있으면 log에 revers mapping이 가능한 ip address들은 domain
name으로 log를 남기며, 그렇지 않은 것들은 ip address로 남기게 된다.
off일 경우에는 무조건 ip address로 남게 된다.

또한 이 지시자의 값이 Off일 경우에는 apache에서 제공하는
Cookie인 REMOTE_HOST 역시 작동을 하지 않는다.

#
# ErrorLog: 에러 기록 파일의 위치.
# <VirtualHost> 컨테이너 안에서 ErrorLog 설정을 하지 않으면
# 그 가상 호스트에 관련된 에러 메시지도 역시 이 곳에 기록된다.
# <VirtualHost> 컨테이너 안에서 에러 로그 파일을 정의하면
# 관련된 에러 메시지는 그 파일로 저장된다.
#
ErrorLog /var/log/httpd/error_log

Server에서 발생하는 error를 기록하는 log file을 지정한다.
상대 경로로 지정을 하면 위의 Server Root의 값이 앞에 자동으로 부여 된다.

만약 ErrorLog를 남기고 싶지 않다면 /dev/null로 지정을 해 주면 된다. 예: ErrorLog /dev/null

#
# LogLevel: error_log에 기록될 메시지 분량을 제어한다.
# debug, info, notice, warn, error, crit, alert, emerg 등의 값이 가능하다.
#
LogLevel warn

#
# 다음 지시자는 CustomLog 지시자(아래 참고)에서 사용할 몇 가지
# 형식에 대한 별명을 정의한다.
#
LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”” combined
LogFormat “%h %l %u %t “%r” %>s %b” common
LogFormat “%{Referer}i -> %U” referer
LogFormat “%{User-agent}i” agent

#
# 접근 로그 파일의 위치와 형식(공통 로그파일 형식)
# <VirtualHost> 컨테이너 안에서 접근 로그파일 설정을 하지 않으면
# 모든 기록이 이 파일에 남게 된다. 이와 반대로 각 <VirtualHost> 마다
# 접근 로그파일을 정의하면 모든 처리가 바로 그 파일에 기록된다.
#
CustomLog /var/log/httpd/access_log common

만약 CustomLog를 남기고 싶지 않다면 ErrorLog와는 달리 Log에 대한 설정을 모두 주석 처리를 하면 된다.
ErrorLog와 같이 /dev/null로 설정을 해도 상관은 없다.

#
# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는
# 다음 지시 내용의 주석 처리를 해제하라.
#
# 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다.
# 에이전트 로그를 남기면 여러분의 사이트에 방문하는 브라우져의 종류에 대한
# 통계를 낼 수 있다.
#
# 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로
# 직전에 방문한 사이트를 말한다.
#
#CustomLog /var/log/httpd/referer_log referer
#CustomLog /var/log/httpd/agent_log agent

#
# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는
# (통합 로그파일 형식) 다음 지시 내용을 사용하라.
#
# 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게
# 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!
#
#CustomLog /var/log/httpd/access_log combined

이 설정은 위의 CustomLog logs/referer_log referer, CustomLog logs/agent_log agent 를 합쳐 놓은 것이라
생각하면 된다. 이 행의 주석을 풀어 주기 위해서는 위의 두행이 주석처리가 되어 있어야 한다.

#
# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록,
# mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에
# 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다.
# “Email”로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.
# On | Off | EMail 중 하나로 설정한다.
#
ServerSignature On

역시 1.3.4에서 새로 추가된 module이다. 에러 메시지에 ServerName과 ServerAdmin을 표시해 줄수 있다.

#
# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음)
# 홈페이지의 링크와 같다면 비유가 될까 ?….. 형식은 다음과 같다.
# Alias 가짜이름 실제이름
#
# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야
# 처리함을 잘 알아두자. 따라서 “/icons”는 별칭 처리되지 않고
# “/icons/”만 별칭 처리된다.
#
Alias /icons/ “/var/www/icons/”

<Directory “/var/www/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

#
# scriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다.
# scriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리
# 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다.
# 맨 뒤에 붙는 “/” 에 대한 규칙은 Alias와 마찬가지이다.
#
scriptAlias /cgi-bin/ “/var/www/cgi-bin/”
서버에서 사용하는 cgi를 담은 디렉토리를 지정한다. 이 디렉토리의 파일들은 서버에 의해
cgi스크립트로 인식되어 활성화 시켜준다.

주의할 것은 scriptAlias로 지정한 곳에서는 오로지 실행 파일만 인식을 한다는 것이다.
일반 파일들은 권한 에러를 발생하게 된다.

<Directory /home/*>
Options ExecCGI Includes Indexes FollowSymLinks
</Directory>

#
# “/home/httpd/cgi-bin” 부분은 scriptAlias로 별칭 처리된 실제 CGI
# 디렉토리로 설정해야 한다.
#
<Directory “/var/www/cgi-bin”>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

#
# Redirect를 사용하면 서버의 이름공간에 존재했으나 현재에는 존재하지 않는
# 문서에 대하여 클라이언트에게 통보할 수 있도록 해준다. 이렇게 함으로써
# 위치가 변한 새로운 문서를 어디에서 찾을 수 있는지 클라이언트에게
# 알려줄 수 있다.
# 형식: Redirect 예전URI 새URI
#

자료파일을 url에 지정된 문서로 Redirect 한다.

#
# 서버가 생성하는 디렉토리 목록의 표시 상태를 제어하는 지시자.
#

#
# FancyIndexing은 예쁜 디렉토리 목록 또는 표준적인 디렉토리 목록 여부를 결정한다.
#
IndexOptions 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/*

IndexOptions에서 FancyIndexing이 지정되었을 때 이 지시자는
file마다 MIME type에 따라 어떤 icon을 사용 할지 정한다.

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^^

Server가 file과 Directofy를 표시하는데 어떤 icon을 사용할 지 지정한다.

#
# DefaultIcon이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한
# 기본 아이콘 파일을 설정한다.
#
DefaultIcon /icons/unknown.gif

#
# AddDescription은 서버 자동 생성 인덱스의 파일명 뒤에 간단한 설명을
# 넣을 때 사용한다. FancyIndexing을 사용할 때에만 보인다.
# 형식: AddDescription “설명” 화일명
#
#AddDescription “GZIP compressed document” .gz
#AddDescription “tar archive” .tar
#AddDescription “GZIP compressed tar archive” .tgz

# META 태그를 사용하여 Content-type의 charset을 설정하지 않은
# 문서에 대하여 기본 문자셋을 iso-8859-1 로 해 버리는 패치에
# 대한 설정 (한글 사용을 위해서는 어쩌면 필요한 설정일지도
# 모른다. 일단 문제가 없으면 그냥 놔두는 것도 괜찮을지 모르겠지만
# 문제가 된다면 설정을 해보는 것도 괜찮을것 같다. 일단 나의 테스트
# 로는 euc-kr로의 설정은 문제가 발생한다. — 패키저 주^^)
AddDefaultCharset Off
#AddDefaultCharset euc-kr

이 설정은 apache 1.3.12에 들어와서 Cross Site scripting 보안 문제 패치를 하면서
기본 글꼴을 iso-8859-1 로 하는 현상이 발생 하므로
한글 사용을 위해서는 어쩌면 필요한 설정일지도 모른다.
일단 문제가 없으면 그냥 놔두는 것도 괜찮을지 모르겠지만 문제가 된다면 설정을
해보는 것도 괜찮을것 같다. 일단 필자의 테스트 로는 euc-kr로의 설정은 문제가 발생한다.

#
# ReadmeName은 서버가 디렉토리 목록 뒤에 내용을 덧붙여 넣을 README 파일의
# 이름을 설정한다.
#
# HeaderName은 디렉토리 인덱스 앞에 내용을 덧붙일 파일명을 설정한다.
#
# 서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다.
# 만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로
# 추가한다.
#
ReadmeName README
HeaderName HEADER

디렉토리 목록을 보여줄 때 목록의 마지막 부분 뒤와 목록의 시작 전에 보여줄 내용을 담고 있는
파일을 지정한다. 여기서는 목록의 뒤에 README, 목록의 처음에 HEADER를 보여주게 지정되어 있다.

#
# IndexIgnore는 디렉토리 인덱싱에 있어 목록에서 제외시킬 파일명을 설정한다.
# 쉘 스타일의 와일드 카드를 사용할 수 있다.
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

디렉토리를 출력할 때 무시할 파일들을 지정한다.

#
# AddEncoding은 특정 브라우져(모자익/X 2.1+)로 하여금 자료를 받으면서
# 정보의 압축을 풀 수 있도록 해준다. 주의: 모든 브라우져가 이 기능을
# 지원하는 것은 아니다. 이름이 유사하기는 하지만 다음부터 나오게 될
# Add로 시작하는 지시자들은 FancyIndexing과는 관련이 없다.
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
<IfModule mod_negotiation.c>

압축 코드에 대한 인코딩정보를 지정한다.

#
# AddLanguage는 문서의 언어를 명시한다. 내용 협상 과정을 통해 브라우져가
# 이해할 수 있는 언어의 문서를 제공하는 것이 가능하다.
# 접미어(suffix)는 언어 키워드와 꼭 같은 필요는 없다. 예를 들어
# 폴란드어(Polish)로 된 문서는 네트웍 표준 언어 코드가 pl 이지만
# 펄 스크립트와 확연히 구별하기 위해 “AddLanguage pl .po”라고 사용한다.
#

AddLanguage ko .ko
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

Server가 다국 언어로 문서를 제공한다면 이 지시자를 사용해 file 확장자를 언어를 지정 하는
약어에 대응시킨다. 언어의 약어는 보통 인터넷 국가 코드를 사용한다.
client가 home.html이라는 file을 요청하면 browser는 프랑스어 사용자라는 것을 전하고 server는
이 지시자를 찾아서 어떤 file 확장자가 프랑스어 문서에 사용되는지 알아본다.
프랑스어 사용자라면 home.html.fr을 받게 된다.
다만 home.html이라는 file이 존재 한다면 home.html.fr을 받지 못하고 home.html을 받아 버리게 된다.

#
# LanguagePriority는 내용 협상 중 동점이 발생하는 경우 언어 우선권을
# 부여한다. 언어의 우선권을 내림차순으로 나열하면 된다.
#
LanguagePriority en fr de
</IfModule>

site에 위에서 지정한 것과 같은 home.html.fr과 같은 문서가 있고 client가 언어를 선택하지 않고
home.html을 요청할때(home.html이 없을 경우) 서버가 보낼 문서를 지정한다. 이 지시자는 여러 언어를
내침 차순으로 나열한다.

#
# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고
# 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다.
#
# php4 module이 설치되었을 경우 아래의 설정에 의해 사용을 할수 있도
# 록 한다.
#
<IfModule mod_php4.c>
AddType application/x-httpd-php .php4 .php3 .phtml .php
AddType application/x-httpd-php-source .phps
</IfModule>

# php3의 경우
<IfModule mod_php3.c>
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
</IfModule>

php3를 사용할 확장자를 지정하는 mime type이다. php3를 사용했을 경우
웹상에서 source를 보여 주고 싶다면 xhttpd-php3-source mime type을 이용하면 된다.

php는 확장 module이다. 그렇기 때문에 apache에 기본적으로 포함 되어 있지는 않다.
php를 사용하기 위해서는 php source를 구해서 apache module로 compile을 하여 사용하여야 한다.
Alzza user 같은 경우에는 설치시에 mod_php package를 설치 하였다면 별 지장없이
위의 주석만 풀어주고선 사용을 할 수가 있다.

# 다음은 PHP/FI (PHP2)를 위한 것입니다.
<IfModule mod_php.c>
AddType application/x-httpd-php .phtml
</IfModule>

AddType application/x-tar .tgz

요즘은 잘 안쓰인다. 무시해 버리자..

#
# AddHandler를 사용하면 특정 파일 확장자와 “처리기”를 연결하거나
# 특정 파일 타입에 특정 동작(action)을 연결할 수 있다.
# 서버에 내장되어 있거나 또는 Action 명령을 사용하여 추가할 수
# 있다.(아래 참고)
#
# 서버 측 포함(SSI) 또는 scriptAlias 처리된 디렉토리 외부에
# 존재하는 CGI 스크립트를 사용하고 싶을 때는 다음 내용의
# 주석을 없

Apache 환경설정 방법

 리눅스  Comments Off on Apache 환경설정 방법
Aug 312010
 

세심하게 정리해 준 원 저자에게 감사…

httpd.conf 설정

설정파일 경로

소스 컴파일 버전 : /usr/local/apache/conf/httpd.conf

RPM 설치 버전 : /etc/httpd/conf/httpd.conf

전체 환경 (Global Environment)

아파치 웹서버 프로세스의 전체적인(global) 부분에 영향을 미치는 부분입니다. 이 부분의 지시자들을 수정(변경)하시면 아파치 메인서버(Section 2)와 가상호스트(Section 3)에 설정된 모든 웹사이트에 영향을 미치게 됩니다.

ServerType standalone

서버의 구동방법으로는 standalone과 inetd방식이 있는데,  standalone 방식은 하나의 웹데몬(아파치서버)이 클라이언트의 접속을 모두 처리하는 방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용합니다. inetd 방식은inetd라는 시스템의 /etc디렉토리 끝에 존재하는 inetd라는 슈퍼데몬이 클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다. 일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용합니다.

ServerRoot “/usr/local/apache/htdocs”

아파치서버의 홈디렉토리를 지정하며 절대경로로 지정합니다. 이후로 나오는 대부분의 패스들은 이 경로에 대한 상대경로로 지정이 됩니다. 예를 들어 환경설정파일, 에러로그 파일등의 상대경로의 기준이 되는 위치이다.

LockFile logs/accept.lock

아파치 컴파일 시 USE_FCNTL_SERIALIZED_ACCEPT나 USE_FLOCK_SERIALIZED_ACCEPT으로

컴파일 했을 때 사용되는 LockFile의 경로 지정시에 사용됩니다. 가급적 기본값으로

사용합니다.

PidFile /var/run/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개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이 두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 “”으로 붙여 두면 주석 처리되어 무시됩니다.

Timeout 300

클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 초단위로 설정합니다. 초기값은 1200이며 보통은 300초로 지정을 합니다. 네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.

KeepAlive On

HTTP 1.0에서는 요청이 일어날 때마다 client와 Server간에 새로운 연결이 만들어 지는데 이 설정으로 인하여 하나의 연결에서 여러 요청이 가능하므로 요청을 처리하는 시간을 증진 시킨다. 이 기능을 끄려면 off로 합니다.

대형 site일 경우에는 이 기능을 끄기를 권장합니다. 이 기능을 Off를 시킬 경우에 system의 부하가 상당히 늘어 나는 것을 느낄 수는 있으나 Web상의 속도에서는 속도가 On일 경우보다 더욱 빠르다는 것을 체감할 수 있습니다. 즉 Web Server만을 돌린다면 Off로 하는 것을 권장하며 여러 서비스를 할 경우에는 On으로 하라는 의미이다. 참고로 이런 것을 체험할 정도의 대형 서비스란 하루 웹로그가 1G이상 쌓이는 경우를 의미 하며 왠만한 site에서는 이 부분에 대해서 신경을 쓰지 않아도 상관이 없다.

MaxKeepAliveRequests 100

접속된채로 특별한 요청이 없음에도 계속 연결을 유지시킬 수치를 지정합니다. 값이 너무 크면 하나의 client가 Server의 resource를 독점 할 수 있으므로 적당 하게 잡는 것이 좋다.

KeepAliveTimeout 15

아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의 요청이 없었을 때 접속을 끊게 됩니다.

MinSpareServers 8

MaxSpareServers 20

아파치 웹서버는 성능향상과 빠른 응답속도를 위해 유휴서버(현재 서비스대기 중인 프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의 상황에 따라 달라지게 됩니다. 유휴서버가 MinSpareServers의 개수(5) 보다 적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(10)보다 많게 되면 죽이게 됩니다. 즉, 유휴서버의 개수를 적절히 조절하기 위한 것이라 생각하면 됩니다.

StartServers 10

httpd 서버를 처음 실행시킬때, 여분의 프로세스를 생성시킬 수치를 지정합니다. 반응 시간을 짧게 하기 위해 StartServers항목에서 말하는  만큼의 Server process를 이미 만들어 두는 것인데, 실제로  Service를 하고 있지 않을 경우에는 잠자고 있으므로 System에 부하를 주거나 하지는 않는다.

MaxClients 150

아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는 이 상한값으로 제한합니다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면 아파치는 응답하지 않고 이 요청을 무시합니다.  이를 제한하는 이유는 시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한 것입니다.

MaxRequestsPerChild 100

아파치 웹서버의 자식프로세스들이 클라이언트의 요청 개수를 지정합니다. 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이 자식프로세스는 자동으로 죽게됩니다. 이 값이 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를 지정해 줘야 합니다.

ExtendedStatus On

server-status로 아파치웹서버의 상태를 상태를 모니터링 할 때 “자세한상태정보”기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것입니다.

‘주(Main)’ 서버 설정

이 부분은 가상호스트에서 핸들링되지 않는 요구들에 응답하는 아파치 메인(기본, default)서버의 설정부분입니다. Section 2 에서 설정하는 항목들은 아파치의 주된 서버가 사용할 값들을 지정합니다. Section 3 에 설정하는 <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은 여기서 지정된 값이 기본값으로 적용됩니다.

또한 여기서 지정하는 값을 각 <VirtualHost>내에도 지정할 수 있으며 이경우엔 각 <VirtualHost>내에서 지정한 값이 우선적으로 적용됩니다. 즉, 이 섹션의 지시자들은 <VirtualHost>정의에 의해 서비스되지 않는 요구들에 대한 부분만 응답하는 아파치메인서버 설정값들을 설정합니다. 또한 중요한 것은 여기서 설정하는 값들은 이 파일의 뒷부분에서 설정하고 있는 <VirtualHost>내의 기본값을 제공하는 역할도 합니다는 것을 기억하시기 바랍니다. 그리고 Section 2 에서 설정하는 모든 지시자들은 Section 3 부분의 <VirtualHost>내에서도 별도로 사용될 수 있습니다. 만약 동일한 지시자가 Section 2와 Section3의 <VirtualHost>애에 모두 설정이 될 경우에는 Section 3 의 <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 )

User nobody

Group nobody

아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user와 group으로 응답을 하게됩니다. 이 설정은 ServerType이 Standalone방식이며, 아파치의 실행이 root권한으로 실행이 되었을 때 유효한 것입니다. 많은 웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody user가 없다면 새로생성(useradd)을 해야 할 것입니다. 단, root로 설정하는 것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을 합니다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서 깊게 고려를 해봐야 합니다.

ServerAdmin admin@nextline.co.kr

여기서 지정하는 email address는 웹 문서 로딩 에러 등의 문제에서 클라이언트측으로 보내질 메일 주소 값 이다. 대부분 웹 서버관리자의 email address로 설정을 합니다.

ServerName www.nextline.co.kr

클라이언트에게 보여주는 호스트이름을 지정합니다.

www를 쓰지 않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있습니다.

예를 들어 bbs.nextline.co.kr을 www.nextline.co.kr로 지정해서 쓸 수 있습니다. 이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를 보여줍니다.

DocumentRoot “/usr/local/apache/htdocs”

아파치 웹서버의 웹문서가 있는 경로를 지정합니다.

예를 들어 “http://www.nextline.co.kr/index.html”의 초기 문서라면 이 초기문서의 절대 경로는 여기서 지정된 “/usr/local/apache/htdocs/index.html”이 됩니다.

경로의 맨 마지막에 “/”를 추가해서는 안됩니다. Alias를 사용하여 다른 위치를 지정할 수도 있습니다.

<Directory />

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

Deny from env=no_access

</Directory>

<directory> tag에 의하여 각 directory마다 적절하게 permission을 걸 수가 있습니다.

“Deny from env=no_access” 설정에 대해서는 뒤에 다루기로 합니다.

<Directory “/usr/local/apache/htdocs”>

Options Indexes FollowSymLinks Includes

① Options

None

어떤 옵션도 이용할 수 없습니다.

All

지정한 directory에서 모든 명령을 이용할 수 있습니다.

Indexes

URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 디렉토리의 파일 목록을 보여주는 옵션입니다.

Includes

서버측의 추가적인 정보를 제공할 수 있게 합니다.

IncludesNoExec

서버측의 추가적인 정보를 제공할 수 있게 하지만, 어떠한 실행 파일을 실행하는 것을 방지합니다.

FollowSymLinks

디렉토리상의 심볼릭 링크를 사용 가능하게 합니다.

ExecCGI

CGI 스크립트를 실행할 수 있게 합니다.

MultiViews

All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용합니다.

② AllowOverride None

.htaccess파일은 서버의 각 디렉토리에 만들어서 각 디렉토리에 대한 접근을 제어하기 위한 것으로 디렉토리에 .htaccess파일이 있으면, 서버 전체에 작용하는 access.conf 보다 우선권을 가집니다. .htaccess파일에 대한 Override에 대한 옵션입니다.

None

.htaccess파일을 읽을 수 없게 합니다.

All

모든 지정에 대해 가능하게 합니다.

Options

규정된 디렉토리 형식을 콘트롤하는 지정의 사용을 허락합니다.

FileInfo

문서형식을 콘트롤하는 지정의 사용을 허용합니다.

AuthConfig

사용자 인증 지정의 사용을 허용합니다. 사용자 인증 변수를 사용합니다.

Limit

호스트 접근을 콘트롤하는 지정을 허용합니다.

Order allow,deny

Allow from all

Deny from env=no_access

Limit에 관련된 부분을 설정을 합니다.

③ Order

서버가 access control을 수행하는 순서를 나타낸다. 여기서는 allow기능을 먼저

수행하고, deny기능을 수행하라는 것입니다.

deny, allow

deny 지시자 부터 검사하고 allow 지시자를 검사 합니다.

allow, deny

allow 지시자 부터 검사하고 deny 지시자를 검사 합니다.

mutual-failure

allow목록에 없는 모든 host에게 접속을 거부 합니다.

allow from

나열되는 주소들에 대한 access control을 가능하게 합니다. 사용 가능한 주소는 도메인 네임, 호스트 이름 주소, 호스트 ip 주소, ip 주소의 앞부분 3바이트, 모든 주소에 해당하는 all 이 있습니다.

deny from

allow from과 반대되는 개념이며, 사용가능한 주소는 allow from과 같다.

Require

사용자, 그룹에 대한 접근을 통제할 수 있습니다.

사용방법 : require entity en1 en2 … enn

entity에 들어갈 수 있는 것은 user, group, valid-user의 세가지이다.

User

지정된 사용자들에게만 접근을 허용하는 것으로, 지정된 사용자에 대한 정보는 AuthUserFile에서 지정한 파일에 있습니다.

Group

지정된 그룹에게만 접근을 허용하는 것으로, 지정된 그룹에 대한 정보는

AuthGroupFile에서 지정한 파일에 있습니다.

valid-user

AuthUserFile에 있는 모든 사용자에 대해 접근을 허용합니다.

</Directory>

UserDir public_html

계정 사용자들의 home directory를 지정합니다.  보통 http://url/~계정 이런식으로 접속했을 때 계정에 이곳에 지정된 이름의 directory를 만들고 home directroy로 사용하면 됩니다. 보통 public_html 이나 htodcs, home 을 많이 쓴다. 다른 이름으로 해도

상관은 없다. 계정 사용자가 사용을 못하게 하려면 DISABLED 옵션을 주면 됩니다.

참고를 할것은 RedHat 계열에서는 user를 생성을 하면 user의 home directory는 700의 권한을 갖게 되므로 httpd.conf에서 아무리 설정을  해 줘도 forbidden error만 만나게 됩니다. 그러므로 계정에서 homepage를 운영하기 위해서는 꼭 chmod a+x ~accountname 명령을 실행을 해 줘야 합니다.

<Directory /*/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>

UserDir 디렉토리에 대한 접근을 제어합니다.  다음은 사용자 홈   페이지에 대하여 읽기만 가능하도록 한 예제 설정 내용입니다.

위의 설정 중 “*” 사용에 관해서 언급을 할 것이 있습니다.

보통 “*”는 all의  의미로 많이 사용이 됩니다.

즉 위에서 /*/public_html 은 어떠한  경로에 있는 모든 public_html을 뜻합니다고 할수 있습니다. 하지만 이는  그렇게 호락호락하게 되지는 않는 듯 합니다.

필자의 경험에 의하면  같은 레벨의 깊이에 있는 public_html 만 적용이 되는듯 합니다.

즉  위의 설정대로라면 /home/public_html은 적용이 되지만 /home/nextline/publci_html 은 적용이 되지 않더란 말입니다.

DirectoryIndex index.html index.htm index.shtml index.php3 index.cgi

디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를 지정해 줍니다.

즉, 디렉토리 이름만을 지정하더라도 여기서 지정한 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”파일에 대한 보안은 누구도 장담할 수 없을 것입니다.

CacheNegotiatedDocs

이 설정은 Proxy Server를 거치는 사용자들을 위한 것입니다. Proxy  Server가 “교섭” 문서, 즉 CGI script의 출력이나 Server가 생성한  index page처럼 직접 수신되지 않는 문서를 cache 하도록 합니다. Default로 주석 처리 되어 있고 그냥 이대로 두면 됩니다.

UseCanonicalName On

웹서버의 mime type을 지정한 파일을 지정합니다. mime.types파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

TypesConfig /etc/mime.types

웹서버의 mime type을 지정한 파일을 지정합니다. mime.types파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

DefaultType text/plain

mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때 알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.

<IfModule mod_mime_magic.c>

MIMEMagicFile conf/magic

</IfModule>

이것 역시 1.3.12에서 부터 새로 추가된 module이다. 사용을 하기  위해서는 DSO 설정에서 mod_mime_magic line의 주석을 해제해야 합니다.

HostnameLookups Off

웹서버의 로그(access_log)를 지정하는 Format에서 “DNS Lookup”으로 지정하였을 때, domain으로 남길 것인가, IP Address로 남길 것인가를 지정합니다. Default로 Off는 IP Address로 남기는 것이며, Domain으로 변경할 필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게 되면 IP address를 IP Domain으로 변환해야 하므로 속도가 조금 느릴 수 있습니다.

ErrorLog logs/error_log

아파치 웹서버의 에러로그 기록파일을 지정합니다.  참고할 사항은 맨 마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을 지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게 되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.  만약 ErrorLog를 남기고 싶지 않다면 /dev/null로 지정을 해 주면 됩니다.

예: ErrorLog /dev/null

LogLevel warn

바로위에서 설정한 에러로그 파일에 얼마나 자세하게 적을 것인지를 결정합니다. 다음에 해당하는 순서대로 중요도가 정해진다.

” debug → info → notice → warn → error → crit → alert → emerg ”

LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\”

\”%{User-Agent}i\”” combined

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

위에서 지정한 4가지의 로그형식(combind, common, referer, agent)중에서 원하는 부분의 (주석행)을 제거하면 지정됩니다.

CustomLog logs/access_log combined

이 설정은 위의 CustomLog logs/referer_log referer,  CustomLog logs/agent_log agent 를 합쳐 놓은 것이라 생각하면 됩니다. 이 행의 주석을 풀어 주기 위해서는 위의 두행이 주석처리가 되어 있어야 합니다.

ServerSignature On

서버가 생성하는 문서(error documents, FTP directory listings,

mod_status and mod_info output etc., but not CGI generated documents)의

trailing footer line의 설정을 가능하게 합니다.

Alias /icons/ “/usr/local/apache/icons/”

<Directory “/usr/local/apache/icons”>

Options Indexes MultiViews

AllowOverride None

Order allow,deny

Allow from all

</Directory>

필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있습니다. 사용하는 형식은 다음과 같다.

Alias fakename(가상이름) realname(진짜이름)

ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”

<Directory “/usr/local/apache/cgi-bin”>

AllowOverride None

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

ScriptAlias는 서버스크립트를 포함합니다. ScriptAlias는 실제디렉토리 안에 들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을 제외하고는 근본적으로 Aliases와 같다.

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/*

IndexOptions에서 FancyIndexing이 지정되었을 때 이 지시자는 file마다 MIME type에 따라 어떤 icon을 사용 할지 정합니다.

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^^

Server가 file과 Directofy를 표시하는데 어떤 icon을 사용할 지 지정합니다.

DefaultIcon /icons/unknown.gif

여기서 지정한 확장가가 아닌 경우에 여기서 지정한 기본아이콘으로 보여줍니다.

AddDescription “GZIP compressed document” .gz

AddDescription “tar archive” .tar

AddDescription “GZIP compressed tar archive” .tgz

AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 표시할 때 사용합니다. 이 설정은 IndexOptions가 FancyIndexing으로 설정되었을때만 표시되며,설정형식은 다음과 같습니다.

형식 : AddDescription “표시할 설명” 파일확장자

AddDefaultCharset Off

AddDefaultCharset euc-kr

이 설정은 apache 1.3.12에 들어와서 Cross Site Scripting 보안 문제  패치를 하면서 기본 글꼴을 iso-8859-1 로 하는 현상이 발생 하므로  한글 사용을 위해서는 어쩌면 필요한 설정일지도 모른다. 일단 문제가  없으면 그냥 놔두는 것도 괜찮을지 모르겠지만 문제가 됩니다면 설정을 해보는 것도 괜찮을것 같다. 일단 필자의 테스트 로는 euc-kr로의

설정은 문제가 발생합니다.

ReadmeName README

HeaderName HEADER

디렉토리 목록을 보여줄 때 목록의 마지막 부분 뒤와 목록의 시작  전에 보여줄 내용을 담고 있는 파일을 지정합니다. 여기서는 목록의 뒤에 README, 목록의 처음에 HEADER를 보여주게 지정되어 있습니다.

IndexIgnore .??* *~ *   HEADER* README* RCS CVS *,v *,t

디렉토리를 출력할 때 무시할 파일들을 지정합니다.

AddEncoding x-compress Z

AddEncoding x-gzip gz

압축 코드에 대한 인코딩 정보를 지정합니다.

<IfModule mod_negotiation.c>

AddLanguage ko .ko

AddLanguage en .en

AddLanguage fr .fr

AddLanguage de .de

AddLanguage da .da

AddLanguage el .el

AddLanguage it .it

</IfModule>

Server가 다국 언어로 문서를 제공합니다면 이 지시자를 사용해 file  확장자를 언어를 지정 하는 약어에 대응시킨다. 언어의 약어는 보통  인터넷 국가 코드를 사용합니다. client가 home.html이라는 file을  요청하면 browser는 프랑스어 사용자라는 것을 전하고 server는  이 지시자를 찾아서 어떤 file 확장자가 프랑스어 문서에 사용되는지

알아본다. 프랑스어 사용자라면 home.html.fr을 받게 됩니다. 다만  home.html이라는 file이 존재 합니다면 home.html.fr을 받지 못하고 home.html을 받아 버리게 됩니다.

<IfModule mod_negotiation.c>

LanguagePriority ko en fr de

</IfModule>

site에 위에서 지정한 것과 같은 home.html.fr과 같은 문서가 있고  client가 언어를 선택하지 않고 home.html을 요청할때(home.html이  없을 경우) 서버가 보낼 문서를 지정합니다. 이 지시자는 여러 언어를 내침 차순으로 나열합니다.

AddHandler cgi-script .cgi .pl .sh

서버의 어떤 위치에 있던지 ‘.cgi’ 확장자를 가진 파일은  cgi-script로 인식하게 합니다. ‘.pl’, ‘.sh’ 등의 다른 확장자도  추가할 수 있습니다. 보안을 이유로 account user들에게 CGI 권한을  주지 않으려면 이행을 주석 처리해야 합니다. 반대로 account user  들에게 CGI권한을 주기 위해서는  이 행의 주석을 풀어 줘야 합니다.

AddType text/html .shtml

AddHandler server-parsed .shtml

AddHandler text/x-server-parsed-html .html .txt

Server Side Includes (SSI)를 사용할 때 필요합니다. SSI는 HTML파일  속에 어떤 실행 프로그램의 결과나 특정 파일을 포함할 수 있게 합니다.

shtml 확장자가 아닌 파일에서도 SSI를 사용할 수 있게 하려면 위에서와  같이 x-server-parsed-html mime type설정을 이용합니다.

MetaDir .web

MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리 이름을 지정합니다. 이 파일들은 문

서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있습니다.

MetaSuffix .meta

MetaSuffix는 메타정보를 포함하고 있는 접미어의 이름을 지정합니다.

ErrorDocument 400 /message/400error.html

ErrorDocument 401 /message/401error.html

ErrorDocument 403 /message/403error.html

ErrorDocument 404 /message/404error.html

ErrorDocument 405 /message/405error.html

ErrorDocument 500 /message/500error.html

ErrorDocument 501 /message/501error.html

또는 스크립트를 이용하여 변수를 전달 시킬 수 도 있습니다.

ErrorDocument 400 /message/error.php?ecode=400

ErrorDocument 401 /message/error.php?ecode=401

ErrorDocument 403 /message/error.php?ecode=403

ErrorDocument 404 /message/error.php?ecode=404

ErrorDocument 405 /message/error.php?ecode=405

ErrorDocument 500 /message/error.php?ecode=500

ErrorDocument 501 /message/error.php?ecode=501

서버에러에 대한 응답을 지정해 주는 부분이다. 각 에러 코드에  대한 응답을 cgi나 일반 텍스트로 만들어서 사용자에게 보여줄  수 있습니다. 어떤 서버에 접속하면 해당 URL이 없다는 등의 한글  메시지가 가능한 것도 이것을 이용하는 것입니다.

아래는 (2)번의 내부 redirects를 사용한 예이다. 나의 경험 상으 로는 외부 방향 전환을 이용했을때 CGI와 htaccess 인증시에 505  Internal Server error가 발생 했다. 왜 그런지 이유는 잘 모르겠다.  내부 방향 전환에는 전혀 이상이 없었다.

BrowserMatch “Mozilla/2” nokeepalive

BrowserMatch “MSIE 4\.0b2;” nokeepalive downgrade-1.0 \

force-response-1.0

다음 지시자는 보통의 HTTP 반응 방식을 수정합니다.

첫번째 것은 네스케이프 2.x 또는 그를 흉내내는 브라우져에  대하여 KeepAlive 기능을 쓰지 않도록 합니다.  이 브라우져들은 KeepAlive 구현에 문제점을 갖고 있기 때문이다.

두번째 것은 HTTP/1.1을 잘못 구현하였고 301 또는 302 (redirect) 반응에 대하여 KeepAlive를 제대로 지원하지 못하는 Micro$oft 인터넷 익스플로러 4.0b2를 위한 것입니다.

BrowserMatch “RealPlayer 4\.0” force-response-1.0

BrowserMatch “Java/1\.0” force-response-1.0

BrowserMatch “JDK/1\.0” force-response-1.0

다음은 기본적인 1.1 반응도 제대로 처리하지 못함으로써 HTTP/1.1 스펙을 위반하고 있는 브라우져에 대하여 HTTP/1.1 반응을 하지 않도록 합니다.

BrowserMatch “WebZIP” no_access

BrowserMatch “Teleport” no_access

BrowserMatch “NamoWebEditor” no_access

BrowserMatch “WebTrack-HTTPP” no_access

BrowserMatch “WebSymmetrix” no_access

BrowserMatch 지시자를 이용하여 User Agent별로 접근을 제어 하도록 합니다.

<IfModule mod_status.c>

<Location /server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from localhost

Allow from all

AuthName “administrator Area”

Authtype Basic

AuthUserFile /home/.htpasswd

AuthGroupFile /dev/null

require valid-user

satisfy all

</Location>

</IfModule>

서버의 상태결과를 http://servename/server-status의 URL에 접근  하면 볼 수 있게 해주는 옵션이다. ‘allow from 서버 도메인네임’의  형식 으로 접근이 가능합니다.

하단의 주석 처리가 되어진 부분은 .htpasswd file에 기록되어 있는 User와 Password로 인증을 하여 보게 하는 설정의 예이다.  .htpasswd 인증을 위해서는 mod_auth.c 가 활성화되어 있어야 합니다. 그럼 여기서 살짝 꽁수를 써보도록 하겠다. 일정 ip address에서는 ip address check만하고 인증을 안하도록 하고 다른 ip address에서  는 인증을 하게 하는 방법을 설정해 보도록 하겠다.

<IfModule mod_status.c>

<Location /server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from localhost

AuthName “administrator Area”

Authtype Basic

AuthUserFile /home/.htpasswd

AuthGroupFile /dev/null

require valid-user

satisfy any

</Location>

</IfModule>

원래의 설정과 위의 설정과의 차이를 보도록 하면, 일단 원래의 설정에서  주석 처리 되어 있는 부분이 모두 주석이 제거가 되어 있습니다. 그리고 제일  마지막 option인 satisfy의 값이 all에서 any가 되어 있습니다. 이것이 바로  키포인트이다. 즉 Allow from에 지정된 ip address나 domain name은 인증  을 안하고 바로 보여주며, 그 외의 주소들은 /home/.htpasswd 에 있는 유  저의 이름과 패스워드를 비교하여 인증을 해서 출력을 하게 됩니다. 이것은 아래의 server-info에도 적용이 가능합니다.

<IfModule mod_info.c>

<Location /server-info>

SetHandler server-info

Order deny,allow

Deny from all

Allow from localhost

Allow from all

AuthName “administrator Area”

Authtype Basic

AuthUserFile /home/.htpasswd

AuthGroupFile /dev/null

require valid-user

satisfy all

</Location>

</IfModule>

1.3.4 에서 부터 새로 추가된 module이다. 이 기능은  http://servername/server-info의 url로 접근을 했을 경우 apache  에서 실행이 가능한 module들의 목록 등 apache의 전반적인 정보를  보여줍니다.

<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:” 헤더를 처리할 것인지 여부를 결정합니다.

(“Full”은 서버 버전을 포함하고 “Block”은 나가는 모든 자료에서 Via: 헤더를 제거합니다.) Off | On | Full | Block 중 하나의 값을 지정합니다.

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가 없으면 캐쉬하지 않음)

</IfModule>

가상 호스트

아파치 가상호스트 설정부분입니다. 하나의 아파치 웹서버에서 여러 개의 도메인 또는 멀티도메인, 또는 서브도메인등으로 여러 개의 웹사이트를 운영하고자 하신다면 가상호스트 설정지시자를 이용하시면 됩니다. 대부분의 경우 여러 개의 IP주소를 사용할 필요없이 하나의 IP주소를 사용하여 여러 개의 웹사이트를 운영할 수 있기 때문에 이름기반의 가상호스트(name-based virtual host)를 사용합니다.

VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트 이름을 관리하고 싶다면 각각에 대하여 VirtualHost 컨테이너를 설정 합니다. 가상 호스트를 설정하기에 앞서 자세한 설명을 <URL:http://www.apache.org/docs/vhosts/>에 들러 읽어보기 바란다.

가상 호스트 설정 내용을 점검해보기 위해서는 아파치를 실행할 때 명령행 옵션으로 ‘-S’를 사용합니다.

NameVirtualHost 12.34.56.78:80

NameVirtualHost 12.34.56.78

이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 개, 그리고 포트 번호)를 정의해주어야 합니다.

<VirtualHost xxx.xxx.xxx.xxx>

ServerAdmin ask@nextline.co.kr

DocumentRoot /home/nextline/public_html

ServerName www.nextline.co.kr

ErrorLog /home/nextline/public_html/logs/error_log

CustomLog /home/nextline/public_html/logs/access_log common

</VirtualHost>

ServerAdmin은 해당서버의 관리자 전자우편이며,

DocumemtRoot는 해당서버의 홈디렉토리이며,

ServerName은 해당서버의 도메인이며,

ErrorLog는 해당서버의 에러파일 위치이며

CustomLog는 로그파일위치와 포맷을 지정한 것입니다.

<VirtualHost _default_:*>

</VirtualHost>

Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에 대해서 응답을

하고자 할 경우 설정해 줍니다.

APACHE_환경설정.pdf

 Posted by at 12:57 PM