달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2014. 8. 7. 11:37

아파치(Apache) 로그 포맷 I.lib()/I.lib(Apache)2014. 8. 7. 11:37

.. .. ..

.

오류 로그 (Error_log)

 

  Error Log는 서버 오류 로그는 진단정보와 요청을 처리하는 도중 발생한 오류를 기록한다. 서버가 시작하거나 동작하는데 문제가 있다면 무엇이 잘못되었고 때때로 어떻게 고치는지를 알려주는 이곳을 가장 먼저 살펴봐야 한다.

 

 

오류 로그는 보통 (전형적으로 유닉스 시스템에서는 error_log, 윈도우즈와 OS/2에서는 error.log) 파일에 기록된다.

오류 로그의 형식은 상대적으로 자유롭고 자세하다. 그러나 대부분의 오류 로그 항목에 공통적으로 나오는 정보가 있다. 예를 들어, 항목은 보통 다음과 같다.

[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test

로그 항목에서 첫번째 항목은 날짜와 시간이다. 두번째 항목은 보고하는 오류의 심각성을 나타낸다. 세번째 항목은 오류를 발생한 클라이언트의 IP 주소이다. 이 다음부터 오류문이 나오며, 이 경우 서버가 클라이언트의 접근을 거부하도록 설정되었다고 나와있다. 요청한 문서의 (웹 경로가 아닌) 파일시스템 경로도 보인다.

 

오류 로그에는 매우 다양한 종류의 문구가 나올 수 있다. 대부분은 위와 비슷하다. CGI 스크립트의 디버깅 출력도 오류 로그에 기록된다. CGI 스크립트가 stderr에 쓴 정보는 그대로 오류 로그로 복사된다.

 

오류 로그에 정보를 추가하가나 생략할 수 없다. 그러나 요청에 대한 오류 로그의 경우 접근 로그에도 대응하는 항목이 생긴다. 예를 들어, 위의 경우 상태코드가 403인 접근 로그 항목이 생긴다. 접근 로그는 사용자정의할 수 있으므로 이 파일을 참고하여 오류 상황에 대한 추가정보를 얻을 수 있다.

접근 로그 (Access Log)

 

서버 접근 로그는 서버가 처리하는 모든 요청을 기록한다. 로그 포맷 설정을 통해 로그에 포함할 내용을 쉽게 선택할 수 있다. 이 절은 서버가 접근 로그에 쓸 내용을 설정하는 방법을 설명한다.

 

물론 접근 로그에 정보를 기록하는 것은 로그 관리의 시작일 뿐이다. 다음 단계는 이 정보를 분석하여 유용한 통계를 만드는 것이다. 이 문서는 일반적인 로그 분석에 대해서 다루지 않으며, 로그 분석은 실제 웹서버가 할 일이 아니다. 로그 분석에 대한 정보와 로그를 분석하는 소프트웨어에 대해서는 Open DirectoryYahoo를 참고하라.

 

아파치 웹서버는 이전부터 mod_log_referer, mod_log_agent, CustomLog 같은 모듈과 지시어를 사용하여 접근 로그를 다루었다. 지금은 CustomLog 지시어가 오래된 지시어들의 모든 기능을 이어받았다.

 

Common 로그 형식

 

접근 로그의 전형적인 설정은 다음과 같다.

 

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

 

 형식문자열은 퍼센트 지시어들로 구성되며, 각각은 어떤 정보를 기록할지 알린다. 형식문자열에 일반 문자를 적으면 그대로 로그에 출력된다. 따옴표 문자(")를 출력하고 싶다면 백슬래쉬를 앞에 붙여서 형식문자열의 끝이 아님을 표시한다. 형식문자열에 줄바꿈 "\n", 탭 "\t"와 같은 특수 조절문자를 사용할 수 있다.

 

앞의 설정은 공통로그형식(Common Log Format, CLF)이라는 형식으로 로그 항목을 기록한다. 여러 다른 웹서버들도 이런 표준 형식으로 로그를 만들며, 여러 로그 분석 프로그램에서 읽을 수 있다. CLF로 만든 로그파일 항목은 다음과 같다:

 

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

 

이제 로그 항목의 각 부분을 설명한다.

127.0.0.1 (%h)
서버에 요청을 한 클라이언트(원격 호스트)의 IP 주소이다. HostnameLookupsOn이라면 호스트명을 찾아서 IP 주소 자리에 대신 쓴다. 그러나 이 설정은 서버를 매우 느리게 할 수 있으므로 추천하지 않는다. 호스트명을 알려면 대신 나중에 logresolve와 같은 로그를 처리하는 프로그램을 사용하는 것이 좋다. 여기에 나온 IP 주소는 사용자가 사용하는 컴퓨터 주소가 아닐 수 있다. 프록시 서버가 사용자와 서버사이에 존재한다면, 원래 컴퓨터 주소가 아니라 프록시의 주소가 기록될 것이다.
 
- (%l)
출력에서 "빼기기호"는 요청한 정보가 없음을 나타낸다. 이 경우 여기에 나올 정보는 클라이언트 컴퓨터의 identd가 제공할 클라이언트의 RFC 1413 신원이다. 이 정보는 매우 믿을 수 없기때문에, 긴밀히 관리되는 내부 네트웍이 아니라면 절대로 이 정보를 사용하면 안된다. IdentityCheckOn이 아니라면 아파치 웹서버는 이 정보를 알아보려고 시도하지도 않는다.
 
frank (%u)
이는 HTTP 인증으로 알아낸 문서를 요청한 사용자의 userid이다. 보통 이 값은 CGI 스크립트에게 REMOTE_USER 환경변수로 넘겨진다. 요청의 상태코드가 401이라면 (아래 참고) 사용자가 아직 인증을 거치지 않았으므로 이 값을 믿으면 안된다. 문서를 암호로 보호하지 않는다면 이 항목은 이전 항목과 같이 "-"이다.
 
[10/Oct/2000:13:55:36 -0700] (%t)
서버가 요청처리를 마친 시간. 형식은:

[day/month/year:hour:minute:second zone]
day = 숫자 2개
month = 숫자 3개
year = 숫자 4개
hour = 숫자 2개
minute = 숫자 2개
second = 숫자 2개
zone = (`+' | `-') 숫자 4개

로그 형식문자열에 %{format}t를 사용하여 다른 형식으로 시간을 출력할 수 있다. format은 C 표준 라이브러리의 strftime(3)과 같다.
 
"GET /apache_pb.gif HTTP/1.0" (\"%r\") == ("%m %U%q %H)
클라이언트의 요청줄이 쌍따옴표로 묶여있다. 요청줄은 매우 유용한 정보를 담고 있다. 첫째, 클라이언트가 사용한 메써드는 GET이다. 둘째, 클라이언트는 자원 /apache_pb.gif를 요청한다. 세번째, 클라이언트는 HTTP/1.0 프로토콜을 사용한다. 요청줄의 여러 부분을 따로 로그할 수도 있다. 예를 들어, 형식문자열 "%m %U%q %H"은 "%r"과 똑같이 메써드, 경로, 질의문자열, 프로토콜을 로그한다.
 
200 (%>s)
이는 서버가 클라이언트에게 보내는 상태코드이다. 이 정보는 (2로 시작하는 코드) 요청이 성공하였는지, (4로 시작하는 코드) 클라이언트에 오류가 있는지, (5로 시작하는 코드) 서버에 오류가 있는지 알려주므로 매우 중요하다. 상태코드의 전체 목록은 HTTP 규약 (RFC2616 section 10)에서 찾을 수 있다.
 
2326 (%b)
마지막 항목은 응답 헤더를 제외하고 클라이언트에게 보내는 내용의 크기를 나타낸다. 클라이언트에게 보내는 내용이 없다면 이 값은 "-"이다. 내용이 없는 경우 "0"을 로그하려면 대신 %B를 사용한다.

 

Combined 로그 형식

 

자주 사용되는 다른 형식문자열은 결합된로그형식(Combined Log Format)이다. 다음과 같이 사용한다.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined

이 형식은 두 항목을 더 추가한 것을 제외하고는 Common 로그 형식과 완전히 같다. 추가된 항목들은 퍼센트 지시어 %{header}i를 사용한다. 여기서 header 자리에 HTTP 요청 헤더 이름이 나올 수 있다. 이 형식의 접근 로그는 다음과 같다:

 

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

추가된 항목은:

"http://www.example.com/start.html" (\"%{Referer}i\")
"Referer" (맞춤법 틀리지않았음) HTTP 요청 헤더. 클라이언트가 참조했다고 서버에게 알린 사이트이다. (즉, /apache_pb.gif를 링크하였거나 포함한 사이트이다.)
 
"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\")
User-Agent HTTP 요청 헤더. 클라이언트 브라우저가 자신에 대해 알리는 식별정보이다.

 

여러 접근 로그

 

설정파일에 여러 CustomLog 지시어를 사용하면 접근 로그가 여러개 만들어진다. 예를 들어, 다음 설정은 세가지 접근 로그를 만든다. 첫번째는 기본 CLF 정보를 기록하고, 두번째와 세번째는 referer와 브라우저 정보를 기록한다. 마지막 두 CustomLog 줄은 어떻게 이전 ReferLogAgentLog 지시어의 기능을 흉내낼 수 있는지 보여준다.

 

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

 

또, 이 예는 LogFormat으로 반드시 별명을 정의할 필요는 없음을 보여준다. 대신 CustomLog 지시어에 직접 로그 형식을 지정할 수 있다.

 

조건부 로그

 

클라이언트 요청의 성격에 따라 해당 항목을 접근 로그에 기록하지않고 싶을 때가 있다. 환경변수를 사용하면 쉽게 해결된다.

 

먼저, 클라이언트가 특정 조건을 만족하면 환경변수를 설정한다. 이 작업에는 보통 SetEnvIf를 사용한다. 그리고 CustomLog 지시어에 env=을 사용하여 환경변수 유무에 따라 요청을 집어넣거나 뺀다. 예를 들면:

 

# loop-back 인터페이스에서 요청을 표시한다
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog

 

# robots.txt 파일에 대한 요청을 표시한다
SetEnvIf Request_URI "^/robots\.txt$" dontlog

# 나머지를 로그에 남긴다
CustomLog logs/access_log common env=!dontlog

 

다른 예로 영어권 사용자의 요청만을 한 로그파일에 기록하고, 비영어권 사용자의 요청은 다른 로그파일에 기록하는 경우를 생각해보자.

SetEnvIf Accept-Language "en" english
CustomLog logs/english_log common env=english
CustomLog logs/non_english_log common env=!english

 

조건부 로그는 매우 강력하고 유연하지만, 이것이 로그 내용을 조절하는 유일한 방법은 아니다. 로그파일은 서버의 모든 행동을 기록할때 더 유용하다. 나중에 원하지않는 요청을 제외하고 로그파일을 분석하는 것이 더 쉽다.

 

위 글은 [http://httpd.apache.org/docs/2.4/logs.html] 글을 참조하여 작성하였습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.
:
Posted by .07274.
.. .. ..

Linux에 무료 웹서버인 Apache를 설치하는 방법을 정리 해 보았습니다.

1. 다운로드 및 압축풀기
2. 구성
3. 컴파일 및 설치
4. 설정
5.실행

1. 다운로드 및 압축풀기
아래 사이트에서 최신버전을 아파치를 다운 받으세요.

http://httpd.apache.org/
(제가 받은 파일은 httpd-2.2.17.tar.gz 입니다.)

다운 받은 파일을 서버의 설치할 곳(예:/usr/local/)에 올리시고 압축을 풀어 주세요.
$ gunzip httpd-2.2.17.tar.gz
$ tar xvf httpd

2. 구성
최상위 디렉토리에서 ./configure를 입력한다.
$ ./configure
만약 설치 디렉토리를  지정할 경우에는 prefix 옵션을 사용한다.
$ ./configure –prefix=설치디렉토리(예:/usr/local/apache)
*몇분정도걸림.

3. 컴파일 및 설치
구성이 완료되면 make를 실행하여 컴파일 한다.
$ make
컴파일이 완료되면 아래 명령어를 사용하여 설치 한다.
$ make install

4. 환경설정
설치디렉토리/conf/httpd.conf 파일을 수정한다.
$ vi httpd.conf
ServerRoot “/usr/local/apache” –> 설치 디렉토리로 변경
Listen xxx.xxx.xxx.xxxx:80 –> 설치 서버 IP로 변경
ServerName localhost –>서버네임을 localhost로 변경
DocumentRoot “/home/webuser/webapps” –> html 홈 디렉토리 변경
:wq(vi에디터 저장 후 종료)

5.실행
설치디렉토리/bin/에서 다음 명령 실행
$ apachectl start
브라우저에서 해당서버 URL을 입력했을때

It works!

라는 문구가 보이면 설치가 완료된 것입니다.

 

 

작업중 Error 발생시 아래 참조

 

1. http://blog.naver.com/PostView.nhn?blogId=mook7508&logNo=120158730601

 

2. http://windowx.tistory.com/363

 

 

-- 에러 파일 설치 방법

 

apache 설치

mkdir -p /myhome/INSTALL/apache
cd /myhome/INSTALL/apache
wget "http://apache.tt.co.kr/httpd/httpd-2.4.3.tar.gz" ./
tar -xvzf httpd-2.4.3.tar.gz
cd httpd-2.4.3

./configure \
--prefix=/myhome/apps/apache \
--enable-mods-shared=all \
--enable-so \
--enable-rewrite

위와 같이 apache 2.4 버전대의 파일을 configure하려고 하면 아래와 같은 오류를 확인할 수 있다.

configure: error: APR not found. Please read the documentation

 

apache 2.4 버전 설치부터는 아래의 모듈이 서버에 설치되어 있어야 한다.

apr (Apache Portable Runtime)

 - http://en.wikipedia.org/wiki/Apache_Portable_Runtime

apr-util

pcre (Perl Compatible Regular Expressions)

- http://en.wikipedia.org/wiki/Pcre

 

apr 설치

mkdir -p /myhome/INSTALL/apr
cd /myhome/INSTALL/apr
wget "http://apache.mirror.cdnetworks.com//apr/apr-1.4.6.tar.gz" ./
tar -xvzf apr-1.4.6.tar.gz
cd apr-1.4.6

./configure \
--prefix=/myhome/apps/apr
make && make install

 

apr-util 설치

mkdir -p /myhome/INSTALL/apr-util
cd /myhome/INSTALL/apr-util
wget "http://apache.mirror.cdnetworks.com//apr/apr-util-1.4.1.tar.gz" ./
tar -xvzf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1

./configure \
--prefix=/myhome/apps/apr-util \
--with-apr=/myhome/apps/apr
make && make install

 

pcre 설치

mkdir -p /myhome/INSTALL/pcre
cd /myhome/INSTALL/pcre
wget "http://sourceforge.net/projects/pcre/files/pcre/8.31/pcre-8.31.tar.gz/download" ./
tar -xzvf pcre-8.31.tar.gz
cd pcre-8.31

./configure \
--prefix=/myhome/apps/pcre
make && make install

 

위 방법이 되지 않을시에는 아래와 같은 명령 사용

yum install pcre-devel

 

 

## Mod_jk 설정

Tomcat 과 연동을 하기 위한 Connector(mod_jk) 를 설치한다.

 

1) http://tomcat.apache.org/connectors-doc/ 에서 1.2.15 소스를 다운받음.

2) 소스 압축풀고 jk/native 디렉토리에 들어가서 루트권한으로..
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make
# make install 하면
mod_jk.so 파일이 /usr/local/apache/modules 에 생성됨 , 만약 없으면 컴파일한 곳에서
복사해서 apache/modules 디렉토리로 복사함. 이 mod_jk.so 파일 하나만 필요함.

 

==== apache2 와 연동하기 ====

1) /usr/local/apache/conf 디렉토리에 mod_jk.conf 파일 생성
(예제 파일 - /examples context 를 샘플로 사용)
Alias /examples /usr/local/tomcat/webapps/examples
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "

 

.
:
Posted by .07274.
2011. 8. 1. 13:39

httpd.conf 과거 자료 I.lib()/I.lib(Apache)2011. 8. 1. 13:39

.. .. ..

httpd.conf 파일은 크게 세부분으로 나누어져 있다.

Section 1: Global Environment : 아파치 전체적인 영향이 미치는 설정
Section 2: 'Main' server configuration : 주 서버에 대한 설정
Section 3: Virtual Hosts : 가상 호스트에 대한 설정

자, 그럼 이제부터 이 아파치웹서버의 모든 환경을 설정하는 아파치환경파일 httpd.conf파일의 설정방법에 대해서 상세히 알아보도록 하자.

### Section 1: Global Environment

전제환경설정 파트로 Section 1에서 설정하는 것들은 아파치 웹서버에
전반적인 영향을 미친다.

ServerType standalone

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


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개이au 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 Address와 포트에 대해서도 연결할 수
있도록 해 준다. 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual
Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.


BindAddress *

서버가 응답할 수 있는 IP Address를 설정하는 것이다. 하나의 시스템에
있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서
많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 한다. "*"으로
설정이 되었다면 모든 IP Address에 대해 응답할 수 있으며, IP Address를
지정한다면 지정한 IP Address에 대해서만 응답할 수 있게 된다. 여러개의
IP Address를 ISP로부터 할당받아서 웹호스팅서비스를 하고자 한다면
이부분에서 지정해 주면된다. 이 설정파일의 맨 뒷부분에 나오는
~부분의 IP bind 가상호스트부분에서 아파치
웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 한다.

ExtendedStatus On

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

### Section 2: 'Main' server configuration

Section 2에서 설정하는 항목들은 아파치의 주된서버가 사용할 값들을
지정한다. 에 정의된 가상호스트들에서 지정하지 않는 것은
여기서 지정된 값이 기본값으로 적용된다. 또한 여기서 지정하는 값을 각
내에도 지정할 수 있으며 이경우엔 각내에서
지정한 값이 우선적용된다.

Port 80

아파치웹서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면
80번으로 해둬야 한다. 사용가능한 포트는 0 ~ 65535이며 1024이하의
포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른
포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다.
특별한 지정이 없다면 에 정의된 각각의 가상호스트들의
기본포트가 된다. 만약 내에서 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 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를 보여준다.

DocumentRoot "/usr/local/apache/htdocs"

아파치 웹서버의 웹문서가 있는 경로를 지정한다. 예를 들어
"http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의
절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 된다.
경로의 맨 마지막에 "/"를 추가해서는 안된다. Alias를 사용하여 다른 위치를
지정할 수도 있다.


Options FollowSymLinks
AllowOverride None

에서 지정되는 값에 대한 옵션은 다음과 같은 의미를 가지고
있다.
None : 일단 모든허용을 하지 않는다.
All : 모든허용을 한다.
Indexes :
Includes :
FollowSymlinks :
ExeCGI :
MultiViews :


UserDir public_html

하나의 아파치 웹서버에서 여러 사용자의 홈페이지를 별도로 만들어
관리할 때 필요한 개별 가입자의 홈페이지 디렉토리이름이다. 예를 들어
sspark이란 계정가입자의홈페이지는 "http://manualand.co.kr/~sspark"라는
홈페이지를 가지고 있을 때 sspark의 계정에서 "public_html"이란
디렉토리가 홈디렉토리가 되어 이 디렉토리에 있는 초기문서 index.html을
불러서 보여주게 된다.


AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec

Order allow,deny
Allow from all

MOVE LOCK UNLOCK>
Order deny,allow
Deny from all

계정사용자의 홈페이지(public_html)의 접근에 대한 옵션을 지정한 것이다.


DirectoryIndex index.html

디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를
지정해 준다. 즉, 디렉토리 이름만을 지정하더라도 여기서 지정한
index.html을 찾아서 웹브라우즈에 보여준다. 여러개의 파일을 지정할 수
있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를 들어
"DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을
찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을
찾아서 로딩해 준다.

AccessFileName .htaccess

디렉토리별로 접근제어할 정보(ID, Password)를 담고 있는 파일을
지정한다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기위한
것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에로 접근하려고 할
때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근허용하는
것이다. 보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸로 싶다면
".htaccess"대신에 다름이름을 적어주면 된다.


Order allow,deny
Deny from all

바로위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는
옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이
옵션을 주석처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수
없을 것이다.


UseCanonicalName On

TypesConfig conf/mime.types

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

DefaultType text/plain

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


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

아파치 웹서버의 에러로그 기록파일을 지정한다. 참고할 사항은 맨
마지막에 설정하는 부분에서 각서버에 대한 에러파일을
지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게
되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.

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)대로 로그를 남기게 된다.
맨마지막에서 지정하는 부분에서도 아파치 1.3.9버전 부터는
CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공한다.
에서 CustomLog를 지정하지 않으면 여기서 지정한 형식대로
로그를 남기게 되며 부분에서 CustomLog를 지정했을
경우에는 여기서 지정한 로그형식은 무시된다.

#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
#CustomLog logs/access_log combined

위에서 지정한 4가지의 로그형식(combind, common, referer, 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/"

필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있다. 사용하는 형식은
다음과 같다.
Alias fakename(가상이름) realname(진짜이름)

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

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

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

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

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은 디렉토리목록표시 앞에 붙여질 파일의 이름을 지정한다.
(일종의 머릿말)

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

디렉토리목록을 인덱싱할 때 제외할 파일명을 지정한다. 즉 디렉토리
목록에 포함하지 않을 파일을 지정한다. 쉘스타일의 와일드카드(*, ?)가
허용된다.

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddEncoding은 특정브라우즈(Mosaic/X 2.1+)에서 받고있는 중에 정보에
대한 압축해제를 할 수 있도록한다. 단 모든 웹브라우즈에서 이 기능을
제공하는 것은 아니다.

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

AddLanguage는 문서의 언어를 지정하게 한다.

LanguagePriority en fr de

언어의 우선순위를 내림차순으로 지정한다.

AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
AddType application/x-tar .tgz

AddType은 mime.types의 실제 편집없이도 mime을 설정할 수 있다.

AddHandler cgi-script .cgi

AddHandler는 파일확장자를 처리기(Handler)에 매핑(연결)시켜주게 된다.

AddType text/html .shtml
AddHandler server-parsed .shtml

SSI(Server Side Include)문서를 인식하게 하기위한 설정이다. SSI코드가
들어가 있는 문서는 확장자가 *.shtml이다. 시스템의 날짜와 카운터등
CGI프로그램을 하지 않아도 HTML문서에서 단 몇줄로 CGI의 효과를 낼 수
있는 SSI기능을 인식하게끔 하는 설정이다. "7장. 아파치와 SSI"편에서 자세히
설명되어 있다.


#Format: Action media/type /cgi-script/location
#Format: Action handler-name /cgi-script/location

Action은 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록
미디어 타입을 정의한다.

MetaDir .web

MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리이름을 지정한다. 이
파일들은 문서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있다.

MetaSuffix .meta

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


에러발생시 응답을 정의할 수 있는 방법을 3가지 나타내고 있다.

1) 일반적인 텍스트

ErrorDocument 500 "The server made a boo boo.

2) 지역적인 방향전환

ErrorDocument 404 /missing.html
ErrorDocument 404 /cgi-bin/missing_handler.pl

3) 외부 방향전환

ErrorDocument 402
http://some.other_server.com/subscription_info.html


다음의 BrowserMatch는 keepalives기능을 쓰지못하게 하며 HTTP
헤드방식을 설정한다.

BrowserMatch "Mozilla/2" nokeepalive

이 설정은 Netscape 2.x 또는 이를 따르는 브라우즈에 대하여 KeepAlive
기능을 쓰지 못하게한다.

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0
force-response-1.0

이 설정은 잘못구현된 HTTP/1.1과 301또는 302반응에 대하여
KeepAlive를 적절히 제공하지 못하는 마이크로소프트 인터넷익스플로러
4.0b2d에 관한 것이다.

BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

위의 3가지 설정은 기본적인 1.1반응도 처리하지 못하며 HTTP/1.0 스팩을
제한하고 있는 브라우즈에 대하여 HTTP/1.1반응을 하지 못하게 한 것이다.


SetHandler server-status
Order deny,allow
Deny from all
Allow from www.manualand.co.kr

서버의 상태를 점검할 수 있게하는 설정이다. 이는
"http://www.manualand.co.kr/server-status"와 같은 형식으로 서버의 상태를
점검할 수 있다. "6장. 아파치서버 모니터링"편에서 자세히 설명되어 있다.
여기서 지정한 "SetHandler server-status"의 설정으로 인해 서버
모니터링을 할 수 있는 것이다.


SetHandler server-info
Order deny,allow
Deny from all
Allow from www.manualand.co.kr

이설정을 위해서는 mod_info.c가 적재되어야 하며, 이는
"http://www.manualand.co.kr/server-info"와 같은 방식으로 서버의 정보를
볼 수 있다. 위에서 설정한 server-status와 함께 실행중인 웹서버의
상태점검을 위한 것이다.


Deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

아파치 1.1이전 버전의 오래된 버그에 대한 악용이 있을시에는 지정한곳
(http://phf.apache.org/phf_abuse_log.cgi) 으로 방향을 전환시킨다.



ProxyRequests On

아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 한다. 즉
프락시서버 지시자로서 프락시서버를 on 시킨다.


Order deny,allow
Deny from all
Allow from .your_domain.com

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

이 설정은 캐시기능을 활성화 하기 위한 것이다.

### Section 3: 가상호스트 설정

여러분의 시스템에서 여러개의 도메인이나 호스트네임을 설정하여
관리하고자 한다면 부분을 설정해 줘야 한다. 가상호스트에
대한 정보는 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


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

ServerAdmin은 해당서버의 관리자 전자우편이며,
DocumemtRoot는 해당서버의 홈디렉토리이며,
ServerName은 해당서버의 도메인이며,
ErrorLog는 해당서버의 에러파일 위치이며
CustomLog는 로그파일위치와 포맷을 지정한 것이다.


Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에
대해서 응답을 하고자 할 경우설정해 준다.

해당 글은 지식스폰서가 활동 기간 (04년~08년 6월 종료)중에 작성한 글 입니다.
  • 지식스폰서가 작성한 답변은 본문 내 자기소개 및 출처란의 실명, 상호명, URL표시를 허용합니다.
  • 출처란에 표시된 정보가 지식iN 운영원칙에 위배되는 음란성, 불법성, 청소년 유해사이트 등으로 변질된 경우는 허용이 되지 않습니다.
.
:
Posted by .07274.
2011. 8. 1. 13:20

httpd-default.conf 설정 설명 I.lib()/I.lib(Apache)2011. 8. 1. 13:20

.. .. ..

TimeOut seconds
클라이언트 요청에 의해 서버와 연결된 후, 둘 간에 아무런 메시지가 발생하지 않아서 오류로 처리하는 시간. 즉 대기시간. 네트워크 속도가 나쁘거나 서버의 성능이 낮을 수록 수치를 높게 설정한다.


KeepAlive On|Off

연결 지속성 설정. 프로세스가 요청을 처리하고 연결을 끊을 것인지, 연결을 지속적으로 유지하고 있을 것이지를 설정.


MaxKeepAliveRequests MaxNum
KeepAlive 가 On 일 경우, 커넥션당 처리할 수 있는 최대 요청의 수. 0(영)으로 설정할 경우에는 처리할 수 있는 최대 요청 갯수의 제한이 없다. 이 값을 되도록 높게 설정할 것을 권한다.


KeepAliveTimeout seconds
동일한 연결에 동일한 클라이언트로부터 다음번 요청이 있을 때까지 대기하는 시간.


UseCanonicalName On|Off
아파치 프로세스가 자신의 URL 및 SEVER_NAME, SERVER_PORT 값을 어떠한 방식으로 설정할지를 결정하는 지시어이다. 이 값이 Off 라면, 아파치는 클라이언트에 의해 제공되는 Hostname 과 Port 를 사용한다. 만약 On 으로 설정하였다면 아파치는 ServerName 지시어의 값을 사용한다.


AccessFileName .htaccess

각각의 디렉토리에 .htaccess 파일을 두어서 해당 디렉토리에 대하여 아파치의 설정값을 변경할 수 있도록 해준다. AllowOverride 지시어와 같이 동작한다.


ServerTokens Full | OS | Minor | Minimal | Major | Prod

서버의 HTTP 응답 헤더 구성.
Full - Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
OS - Server: Apache/2.0.41 (Unix)
Minor - Server: Apache/2.0
Minimal - Server: Apache/2.0.41
Major - Server: Apache/2
Prod - Server: Apache


ServerSignature On | Off | EMail
서버의 내부 오류나 FTP 디렉토리 리스팅 등, 서버에 의해 생성되는 페이지에 서버의 버전정보, 호스트네임 등을 추가할 수 있다.


HostnameLookups On | Off

로그 기록시 도메인네임(On) 또는 아이피주소(Off)로 저장할지를 설정한다. On 일 경우, DNS 질의를 하기 때문에 성능저하를 불러올 수 있다.

.
:
Posted by .07274.
.. .. ..
Linux의 많은 데몬들은 config파일을 설정하는 것으로 그 기능을 제어할 수 가 있다.
우리는 Linux의 Web Server를 제어하기 위해 그 config파일을 변경해야한다.

$1. httpd.conf파일 설정

1) 위치
 
-소스설치시:/usr/local/etc/httpd/conf/httpd.conf
-rpm설치시:/etc/httpd/conf/httpd.conf
#############################################################################
#
# 아파치 버전 1.3.12
#
# 번역 및 조언 : 이 만 용
#
# 번역 상의 오류나 더 매끄러운 번역을 위한 제안 사항은 언제나
# 환영합니다.  여러분께 감사합니다.
#
#############################################################################
#
# 베테랑 아파치 서버 관리자들에게 보내는 메시지)
# -----------------------------------------------
#
# 아파치 설정 파일은 전통적으로 httpd.conf, srm.conf, access.conf 이렇게
# 3 개로 구성되어 있다.  그러나 내부적으로는 3 개의 파일에 대한 구별을
# 하지 않고 순차적으로 읽어나갈 뿐이다.
#
# 3 개의 파일 내용은 관례적인 것일 뿐이다.  아파치 신 버전부터는 모든
# 설정 내용이 하나의 거대한 파일 httpd.conf에 들어 있고 나머지 두 파일은
# 빈 파일로 제공되고 있다.
#
# 이런 사실을 알아두기 바란다.
#
#############################################################################
#
# 팁)
#
# 1) 문제가 발생했을 때에는 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'
#
#
# 2) IP 주소 하나에 여러 개의 이름을 부여한 가상 호스트 예제를
#    설정 파일 후반부에 수록하였습니다.
#
#############################################################################
# --
#
# 간단한 용어 정리)
#
# --
#
# 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
서버의 타입을 지정 stanadalone은 httpd데몬 프로세스가
사용자의 요쳥을 처리하는 것이고 inetd는  inetd 데몬 프로세스가 처리하게
하는 것 stanadalone가 더 효율적
#
# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이
# 기록되는 디렉토리의 최상위 경로명.
#
# 주의! 만약 서버 루트를 NFS (또는 기타 네트웍 파일 시스템) 마운트된
# 곳에 두고자 한다면 LockFile 문서를 꼭 읽어보아야 한다.
# (
);
# 문서를 읽고 나면 앞으로 닥칠 지 모르는 몇 가지 문제점을 피할 수 있다.
#
# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!
#
ServerRoot "/usr/local/etc/httpd"
서버의 Root 디렉토리를 지정
#
# LockFile 지시자는 아파치를 USE_FCNTL_SERIALIZED_ACCEPT 또는
# USE_FLOCK_SERIALIZED_ACCEPT 옵션을 주고 컴파일한 경우, 잠금 파일을
# 경로를 지정할 때 사용한다.  이 지시자 값은 일반적으로 기본값이
# 되도록 놔둔다.  이 값을 바꾸는 경우는 로그 디렉토리가 NFS 마운트된
# 곳에 있는 경우로서 잠금 파일은 항상 네트웍 파일 시스템이 아닌
# 로컬 디스크에 저장되어야 하기 때문이다.  주 서버 프로세서의 PID 값이
# 자동으로 파일 이름 뒤에 붙는다.
#
#LockFile /usr/local/etc/httpd/logs/httpd.lock
잠금 파일의 위치를 설정
#
# PidFile: 서버가 시동될 때 자신의 프로세스 고유 번호를 기록할 파일
#
#PidFile /usr/local/etc/httpd/logs/httpd.pid
서버가 실행될때 프로세스 ID를 기록할 파일 지정
#
#ScoreBoardFile: 내부 서버 프로세스 정보를 기록하는데 사용하는 파일.
# 모든 아키텍쳐에서 꼭 필요한 것은 아니다.  하지만 필요하다고 생각하는
# 경우에는 하나의 아파치 프로그램을 두 번 이상 실행시키는 경우 값이
# 중복되지 않도록 해주는 것만 잊지 않으면 된다.
#
ScoreBoardFile /usr/local/etc/httpd/logs/httpd.scoreboard
서버에서 실행되고 있는 파일의 정보 기록
#
# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을
# 차례대로 읽어나간다.  나중에 있는 2 개의 파일은 현재 아무 내용도
# 없는 빈 상태로 배포되고 있다.  왜냐하면 모든 지시자를 그냥 하나의
# 파일에 적는 것이 더욱 명료하기 때문이다.  주석으로 처리되어 있는
# 값은 기본값이다.  서버가 이 파일 내용을 무시하도록 하기 위해서는
# "/dev/null" (유닉스의 경우) 또는 "nul" (Win32) 값을 지정한다.
#
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf
두 파일을 별도로 사용하고자 한다면 주석제거,
httpd.conf로 두 파일이 통합
#
# Timeout: 받기/보내기 타임 아웃 시간
#
Timeout 300
클라이언트가 정보를 받을때 까지 소요되는 대기시간 단위(초)
네트워크가 응답이 늦을 수록 수치를 늘리는 것이 좋음
#
# KeepAlive: 지속성(persistent) 접속을 허가할 것인가 말 것인가?
# (한 번의 접속에서 여러 개의 요청을 처리할 것인가 여부)
# 허가하지 않기 위해서는 "Off"로 설정한다.
# 허가하지 않는 것과 허가하는 것과의 효율 차이는 매우 크다.
#
KeepAlive On
접속된 채로 특별한 요청이 없어도 계속 연결 유지 (Off)
#
# MaxKeepAliveRequests: 지속성 접속 기간 동안 처리할 수 있는 최대 요청 갯수
# 0 을 넣으면 무한대이다.  높은 성능을 내기 위해서 높은 값을 추천한다.
#

MaxKeepAliveRequests 100
지속적인 접속 동안에 허용할 최대 요청 횟수
on:허용 off:1회만
#
# KeepAliveTimeout: 같은 접속 상태에서 같은 클라이언트의 요청이 타임 아웃되는
# 시간 (초 단위)
#
KeepAliveTimeout 15
똑같은 클라이언트가 같은 접속 방법으로 다음 요청을 했을 때
기다리는 시간
#
# 서버 풀(Server-pool) 크기 조정.  몇 개의 프로세스가 필요한지 여러분에게
# 추측하도록 하기 보다는 현재의 부하 상태에 자동으로 적응하도록 되어 있다.
# 아파치 서버는 현재의 부하 상태와 순간적으로 급격히 상승하는 경우 값
# (예를 들어 하나의 네스케이프 브라우져에서 동시에 여러 개의 요청이
#  들어올 수 있다)을 처리할 수 있는 충분한 갯수의 서버 프로세스를 유지하려
# 노력한다.
#
# 아파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지 점검한다.
# 만약 MinSpareServers 보다 적다면 여유 서버 프로세스를 생성한다.
# 만약 MaxSpareServers 보다 많으면 불필요한 여유 프로세스를 제거한다.
# 이 곳에 제시된 기본값은 거의 대부분의 사이트에 적합하다.
#

MinSpareServers 16
MaxSpareServers 64
프로세스 개수 조절
MinSpareServers=<프로세스=
Listen 80
Listen 443

#
# 서버 프로세스의 최대값, 즉 동시에 접속할 수 있는 클라이언트 갯수를
# 제한하는 값이다. -- 만약 이 값에 도달한다면 클라이언트의 요청은
# 봉쇄될 것이다.  따라서 이 값이 너무 낮아서는 안된다.  이 값은
# 아파치 서버가 너무 많은 자원을 소비하여 전체 시스템을 먹통이 되도록
# 하는 것을 방지하기 위해 사용될 뿐이다.
#
MaxClients 150
클라이언트의 동시 접속수

#
# MaxRequestsPerChild: 각 자식 프로세스가 죽기 전까지 처리할 수 있는
# 요청 갯수.  한 프로세스가 너무 오랫 동안 사용되면 메모리 누출이나
# 자원 누출(아파치 때문에 또는 잘못된 라이브러리 때문에)이 발생할 수
# 있으므로 자식 프로세스는 자동으로 죽는다.  대부분의 시스템에서는
# 필요치 않으나 솔라리스에서와 같이 라이브러리에서의 자원 누출 현상을
# 막기 위해 필요하다.  제한을 두지 않으려면 0 으로 설정한다.
#
MaxRequestsPerChild 100
자식 프로세스가 죽기 전에 처리할 수 있는 요청 개수
#
# Listen: 아파치를 기본값 이외에도 특정 IP 주소 또는 포트에 연결하도록
# 해준다.  지시자도 참고하라.
#
#Listen 3000
#Listen 12.34.56.78:80
아파치 기본 설정에IP주소 또는 IP와 포트를 결합하여 사용
가상호스트 운용시
#
# BindAddress: 이 옵션을 사용하여 가상 호스트를 지원할 수 있다.
# 이 지시자를 이용하여 서버가 귀기울일 IP 주소를 지시할 수 있다.
# "*", IP 주소, 또는 완전한 인터넷 도메인 이름을 사용할 수 있다.
# , Listen 지시자도 참고하라.
#
#BindAddress *
서버가 어느IP에 귀기울여야 하는지를 나타냄 가상호스트시
*로 지정
#
# 동적 공유 객체(Dynamic Shared Object, DSO) 지원
#
# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련된
# 지시자를 사용하기에 앞서 알맞게 `LoadModule' 지시자로 모듈을
# 지시해주어야 한다.  DSO 작동방식에 대하여 자세히 알고 싶은 사람은
# 아파치 1.3 배포 파일의 README.DSO 를 읽어보라.  여러분이 갖고 있는
# httpd 바이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을
# 알고 싶을 때에는 `httpd -l' 명령을 실행한다.
#
# 주의: 모듈을 적재하는 순서는 매우 중요하다.  전문가의 조언 없이
#       아무렇게나 순서를 바꾸지 말라.
#
# 예:
# LoadModule foo_module libexec/mod_foo.so
#
# 모듈 관련 문서는 HTML 형식으로 "/home/httpd/manual/mod" 에 놓아두었다.
#
# 주의: LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라
#       나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.
#
#LoadModule mmap_static_module modules/mod_mmap_static.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 proxy_module       modules/libproxy.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 dbm_auth_module    modules/mod_auth_dbm.so
LoadModule db_auth_module     modules/mod_auth_db.so
LoadModule digest_module      modules/mod_digest.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 ssl_module         modules/libssl.so

#
# 확장 모듈
#
#LoadModule php_module         modules/mod_php.so
#
# 다음 모듈은 MySQL 데이터베이스와 더불어 서버 스크립팅 언어로 인기를
# 누리고 있는 PHP3 모듈입니다.
#
# 참고 사이트 : http://www.php.net
#
# 주의 : 설정을 바꾸고 나서 한 가지 할 일이 더 있다.
#
#        AddType application/x-httpd-php3 .php3
#
#        위와 같은 행을 찾아서 주석을 풀어주어야 한다.
#
LoadModule php3_module        modules/libphp3.so
#
# 다음 모듈은 아파치 펄 모듈로서 CGI 스크립트로 펄을 많이 사용하는
# 사람들에게 펄 코드 실행 속도의 향상을 가져다 줍니다.
#
# 주의 : 설정을 바꾼 후 한 가지 할 일이 더 있다.
#
#        ...
#
#        위와 같은 설정을 찾아서 펄 스크립트를 사용할 수 있는
#        디렉토리를 설정해주어야 한다.
#
LoadModule perl_module        modules/libperl.so
#
#  모듈 실행 순서를 정확하게 하기 위해 사용 가능한 모듈(정적 또는 공유
#  모듈 포함)로부터 완전한 목록을 다시 만들어 둔 것이다.
#  [LOADMODULE 섹션을 하나라도 수정했다면 이 부분도 역시 알맞게 수정하라]
#
ClearModuleList
#AddModule mod_mmap_static.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_proxy.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_dbm.c
AddModule mod_auth_db.c
AddModule mod_digest.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_ssl.c

# Extra Modules
#AddModule mod_php.c
AddModule mod_php3.c
AddModule mod_perl.c
#
# ExtendedStatus 지시자는 "server-status" 처리기가 호출되었을 때
# 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지
# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를
# (ExtendedStatus Off) 제어한다.  기본값은 Off 이다.
#
#ExtendedStatus On
#############################################################################
### 섹션 2: '주(Main)' 서버 설정
#
# 이 섹션에 있는 지시자는 정의에 의해 처리되지 않는
# 모든 요청에 응답할 '주' 서버가 사용할 값을 정한다.
# 이 값들은 또한 이 파일 뒷 부분에서 정의할 모든
# 컨테이너의 기본값을 제공하기도 한다.
#
# 여기 나오는 모든 지시자는 컨테이너 안에서도 사용할
# 수 있으며 그 안에서 사용되면 해당 가상 호스트에 대하여 전체
# 기본값을 무시하고 새롭게 정한 값이 채택된다.
#
#
# 만약 ServerType ('Global Environment' 섹션에서 설정)이 "inetd"인
# 경우, inetd 설정 내용을 따르기 때문에 다시 몇 가지 지시자는
# 아무런 효력을 발휘하지 않는다.
# ServerAdmin 지시자까지 그냥 건너뛴다.
#
#
# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.
# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는
# root 권한으로 실행되어야 한다.
#
Port 80
웹서버 기본 포트 외울것!!!
#
# 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
웹서버 실행시 소유권을 갖게 되는 사용자와 그룹
#
# ServerAdmin: 서버에 문제가 발생했을 때 메일을 보낼 메일 주소.
# 이 주소는 예를 들어 에러 문서와 같이 서버가 생성하는 페이지에
# 나타날 것이다.
#
ServerAdmin root@localhost
서버 이상시 시스템 관리자에게 메일을 보낼 수 있도록
메일주소 설정
#
# ServerName은 클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우
# 호스트 이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제 이름이
# 아닌 'www'를 사용하도록 하는데 사용할 수 있다.)
#
# 주의: 호스트 이름을 아무렇게나 만들어선 안된다.  이 이름은 여러분의
# 호스트에 주어진 타당한 DNS 이름이어야 한다.  잘 모르겠으면 네트웍
# 관리자에게 문의하라.
# 호스트가 등록된 DNS 이름을 갖고 있지 않는 경우에는 이 곳에 IP 주소를
# 적는다.  어찌 되었든 IP 주소를 사용하여(예를 들어 http://123.45.67.89/)
# 접속할 수 있다.  이런 식으로 해서 리다이렉션이 작동하도록 할 수 있다.
#
#ServerName new.host.name
#
# DocumentRoot: 제공할 문서의 상위 디렉토리.
# 기본적으로 모든 요청은 이 디렉토리로부터 처리된다.  하지만
# 심볼릭 링크나 앨리어스(alias)를 사용하여 다른 위치를 가리키도록
# 할 수 있다.
#
DocumentRoot "/usr/local/etc/httpd/htdocs"
index.html이 놓일 위치
#
# 아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와 기능을
# 허용할 것인지 거부할 것인지 여부를 설정할 수 있다.
# 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도 영향을 미친다.
#
# 우선, "기본값"을 매우 제한적인 상태로 설정한다.


    Options FollowSymLinks
    AllowOverride None

아파치 접근 디렉토리 기본 유형
#
# 이 곳부터 허용할 특정 기능을 알맞게 설정해나간다는 사실을 주목하자.
# 여러분이 기대한 대로 작동하지 않는 것이 있다면 그 기능을 가능 상태로
# 설정해두었는지 점검하기 바란다.
#
#
# 다음 내용은 여러분이 설정한 DocumentRoot 값으로 변경해서 사용한다.
#

자신 서버의 DocumentRoot값으로 변경해서 사용
#
# 다음 값에는 "None", "All", 또는 "Indexes", "Includes",
# "FollowSymLinks", "ExecCGI", "MultiViews"의 자유로운 조합이
# 가능하다.
#
# "MultiViews" 만큼은 "Options All"을 사용한다 할 지라도 명시적으로
# 적어야만 작동한다는 사실을 알아두자.
#
Options Indexes FollowSymLinks Includes
#
# 다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤 옵션을
# 마음대로 제어할 수 있는지 결정한다. 
# "All" 또는 "Options", "FileInfo", "AuthConfig", "Limit"의 자유로운
# 결합이 가능하다.
#
AllowOverride None
#
# 서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.

Order allow,deny
Allow from all
먼저 허용하고 거부, 모든 호스트요청을 허용

#
# UserDir: ~user 요청을 받았을 때 사용자의 홈 디렉토리 뒤에 추가할
# 디렉토리 이름.
#
# 주의 : 레드햇 리눅스 시스템에서는 사용자가 자신의 홈 디렉토리에 public_html
#        디렉토리를 만들어도 외부에서 홈 페이지를 볼 수 없다.
#        왜냐하면 각 계정 홈 디렉토리에 대한 보안을 중요하게 생각했기 때문에
#        홈 디렉토리에 대하여 사용자 계정과 사용자 자신의 그룹 이외에는
#        아무런 접근 허가권도 갖고 있지 않기 때문이다.
#
#        개인 홈 디렉토리를 가질 사람은 chmod a+x ~ 명령을 일단 실행해주어
#        (보통) nobody 권한의 아파치 프로세스가 홈 디렉토리에 접근할 수
#        있도록 허가해주어야 한다.
#        물론 public_html과 홈 페이지 파일에 대하여 모든 사용자가 최소한
#        읽기 권한은 갖도록 설정해주어야 한다.
#
UserDir public_html
계정 사용자의 홈디렉토리 ex)http://tri.co.kr/~ppp
#
# UserDir 디렉토리에 대한 접근을 제어한다.  다음은 사용자 홈 페이지에
# 대하여 읽기만 가능하도록 한 예제 설정 내용이다.  참고 자료로
# 사용하기 바란다.
#
#
#    AllowOverride FileInfo AuthConfig Limit
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#   
#        Order allow,deny
#        Allow from all
#   

#   
#        Order deny,allow
#        Deny from all
#   

#

#
# DirectoryIndex: 준비된 HTML 디렉토리 인덱스로 사용할 파일이나
# 파일 목록의 이름을 나열한다.  여러 개를 나열할 때는 스페이스로
# 구분한다.
#
DirectoryIndex index.php3 index.html index.shtml index.cgi
default 문서 순차적 실행
#DirectoryIndex index.html index.shtml index.cgi
#
# AccessFileName: 각 디렉토리에 대하여 접근 제어 정보 내용을
# 담고 있을 파일 이름
#
AccessFileName .htaccess
접근제어 정보 파일명 지정
#
# 다음 행은 웹 브라우져가 .htaccess 파일을 접근할 수 없도록 하는
# 설정이다.  .htaccess에는 인증 정보가 들어있는 경우가 빈번하므로
# 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다.
# 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라.
# 만약 AccessFileName 설정을 다른 파일명으로 바꾸었다면 알맞게
# .htaccess를 그 이름으로 바꾸어준다.
#
# 또한 사람들이 웹 서버 패스워드 파일을 .htpasswd라고하는 경향이
# 있기 때문에 .ht 로 시작하는 파일을 모두 보호한다.
#
# 아파치 1.3.x 버전부터 지시자에서 ~ 다음에
# 정규 표현식을 사용할 수 있다.
#

    Order allow,deny
    Deny from all

#
# CacheNegotiateDocs: 기본적으로 아파치는 내용에 따라 협상된 문서에
# 대해서는 "Pragma: no-cache" 내용을 전송한다.  이 행은 프록시 서버로
# 하여금 문서를 캐쉬하지 않도록 요청한다.  다음 행의 주석을 풀면
# 이 기능을 해제하고 모든 프록시가 문서들을 캐쉬할 수 있도록 한다.
#
#CacheNegotiatedDocs
#
# 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
#
# mod_mime_magic 모듈을 사용하면 파일의 내용을 가지고 파일의 타입에
# 힌트를 얻는다.  MIMEMagicFile 지시자를 사용하여 모듈에게 힌트
# 정보가 저장되어 있는 파일을 설정한다.
# mod_mime_magic은 기본 서버의 일부가 아니다.(따라서 LoadModule
# 설정을 사용하여 모듈을 추가해야 한다.) 또는 서버를 다시 컴파일해서
# mod_mime_magic을 추가해야 한다.  그렇기 때문에 컨테이너에
# 포함되어 있는 것이다.  다음 설정은 모듈이 서버에 포함되어 있을 때에만
# MIMEMagicFile 지시자를 처리하도록 해준다.
#

    MIMEMagicFile conf/magic

#
# HostNameLookups: 클라이언트의 이름 또는 IP 주소만을 기록할 지 여부.
# 예를 들어 www.apache.org (on) 또는 204.62.129.132 (off)
# 기본값이 off 인 이유는 각 클라이언트 요청이 올 때마다 최소한 1 번
# 이상의 네임 서버 요청이 발생하기 때문이다.  그러나 꼭 필요한 경우에는
# 이 기능을 켜둔다.
#
HostnameLookups Off
아파치 서버에 접속하는 클라이언트의 정보를 호스트 주소
또는 도메인으로 기록
#
# ErrorLog: 에러 기록 파일의 위치.
# 컨테이너 안에서 ErrorLog 설정을 하지 않으면
# 그 가상 호스트에 관련된 에러 메시지도 역시 이 곳에 기록된다.
# 컨테이너 안에서 에러 로그 파일을 정의하면
# 관련된 에러 메시지는 그 파일로 저장된다.
#
ErrorLog /etc/httpd/logs/error_log
에러 내용 저장
#
# LogLevel: error_log에 기록될 메시지 분량을 제어한다.
# debug, info, notice, warn, error, crit, alert, emerg 등의
# 값이 가능하다.
# 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
별칭 정의 명령자
#
# 접근 로그 파일의 위치와 형식(공통 로그파일 형식)
# 컨테이너 안에서 접근 로그파일 설정을 하지 않으면
# 모든 기록이 이 파일에 남게 된다.  이와 반대로 각 마다
# 접근 로그파일을 정의하면 모든 처리가 바로 그 파일에 기록된다.
#
CustomLog /etc/httpd/logs/access_log common
접근 기록 정보
#
# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는
# 다음 지시 내용의 주석 처리를 해제하라.
#
# 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다.
# 에이전트 로그를 남기면 여러분의 사이트에 방문하는 브라우져의 종류에 대한
# 통계를 낼 수 있다.
#
# 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로
# 직전에 방문한 사이트를 말한다.
#
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
#
# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는
# (통합 로그파일 형식) 다음 지시 내용을 사용하라.
#
# 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게
# 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!
#
#CustomLog logs/access_log combined
#
# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록,
# mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에
# 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다.
# "Email"로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.
# On | Off | EMail 중 하나로 설정한다.
#
#ServerSignature On
에러 라인 출력 Off시 관리자에게 이메일 전송
#
# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음)
# 형식은 다음과 같다.
# Alias 가짜이름 실제이름
#
# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야
# 처리함을 잘 알아두자.  따라서 "/icons"는 별칭 처리되지 않고
# "/icons/"만 별칭 처리된다.
#
Alias /icons/ "/home/httpd/icons/"


    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all

#
# ScriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다.
# ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리
# 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다.
# 맨 뒤에 붙는 "/" 에 대한 규칙은 Alias와 마찬가지이다.
#
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
#
# "/home/httpd/cgi-bin" 부분은 ScriptAlias로 별칭 처리된 실제 CGI
# 디렉토리로 설정해야 한다.
#


    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all

Options ExecCGI는 CGI를 허용
#
# Redirect를 사용하면 서버의 이름공간에 존재했으나 현재에는 존재하지 않는
# 문서에 대하여 클라이언트에게 통보할 수 있도록 해준다.  이렇게 함으로써
# 위치가 변한 새로운 문서를 어디에서 찾을 수 있는지 클라이언트에게
# 알려줄 수 있다.
# 형식: Redirect 예전URI 새URI
#
#
# 서버가 생성하는 디렉토리 목록의 표시 상태를 제어하는 지시자.
#
#
# 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/*

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이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한
# 기본 아이콘 파일을 설정한다.
#
DefaultIcon /icons/unknown.gif
#
# AddDescription은 서버 자동 생성 인덱스의 파일명 뒤에 간단한 설명을
# 넣을 때 사용한다.  FancyIndexing을 사용할 때에만 보인다.
# 형식: AddDescription "설명" 화일명
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
#
# ReadmeName은 서버가 디렉토리 목록 뒤에 내용을 덧붙여 넣을 README 파일의
# 이름을 설정한다.
#
# HeaderName은 디렉토리 인덱스 앞에 내용을 덧붙일 파일명을 설정한다.
#
# 서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다.
# 만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로
# 추가한다.
#
ReadmeName README
HeaderName HEADER
#
# IndexIgnore는 디렉토리 인덱싱에 있어 목록에서 제외시킬 파일명을 설정한다.
# 쉘 스타일의 와일드 카드를 사용할 수 있다.
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
#
# AddEncoding은 특정 브라우져(모자익/X 2.1+)로 하여금 자료를 받으면서
# 정보의 압축을 풀 수 있도록 해준다.  주의:  모든 브라우져가 이 기능을
# 지원하는 것은 아니다.  이름이 유사하기는 하지만 다음부터 나오게 될
# Add로 시작하는 지시자들은 FancyIndexing과는 관련이 없다.
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
#
# 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
지원하는 언어
#
# LanguagePriority는 내용 협상 중 동점이 발생하는 경우 언어 우선권을
# 부여한다.  언어의 우선권을 내림차순으로 나열하면 된다.
#
LanguagePriority ko en fr de
우선 지원하는 언어
#
# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고
# 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다.
#
# 예를 들어, PHP3 모듈(아파치 배포파일에 포함되어 있지 않다)에
# 대해서는 다음과 같이 사용한다.
#
AddType application/x-httpd-php3 .php3 .html
AddType application/x-httpd-php3-source .phps
mime type을 수정하지 않고도 주어진 파일의 확장자를mime
type으로 바꿈
# PHP4 Zend 에 대한 설정
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps

#다음은 PHP/FI (PHP2)를 위한 것입니다.
#AddType application/x-httpd-php .phtml
#
# .tgz 파일에 대한 타입 설정
#
AddType application/x-tar .tgz
#
# AddHandler를 사용하면 특정 파일 확장자와 "처리기"를 연결하거나
# 특정 파일 타입에 특정 동작(action)을 연결할 수 있다.
# 서버에 내장되어 있거나 또는 Action 명령을 사용하여 추가할 수
# 있다.(아래 참고)
#
# 서버 측 포함(SSI) 또는 ScriptAlias 처리된 디렉토리 외부에
# 존재하는 CGI 스크립트를 사용하고 싶을 때는 다음 내용의
# 주석을 없앤다.
#
# CGI 스크립트를 사용하기 위해:
#
#AddHandler cgi-script .cgi
#
# 서버 처리 HTML 파일 사용하기 위해:
#
AddType text/html .shtml
AddType text/html .htm
AddHandler server-parsed .shtml
#
# 아파치의 send-asis HTTP 파일 기능을 사용하기 위해서는 다음 행의
# 주석을 없앤다.
#
#AddHandler send-as-is asis
#
# 서버 처리 이미지 맵 파일을 사용하려면...
#
AddHandler imap-file map
#
# type map을 사용하려면...
#
#AddHandler type-map var

# perl 모듈을 사용하려면 다음 세션의 주석을 풉니다.
#
#Alias /perl/ /home/httpd/perl/
#
#SetHandler perl-script
#PerlHandler Apache::Registry
#Options +ExecCGI
#

#
# Action을 사용하면 매칭되는 파일이 호출될 때마다 그 미디어 타입에 맞는
# 스크립트를 시행시킬 수 있다.  빈번하게 사용되는 CGI 파일 프로세서에
# 대하여 반복적으로 URL을 사용하지 않아도 된다.
# Format: Action media/type /cgi-script/location
# Format: Action handler-name /cgi-script/location
#
#
# MetaDir: 아파치 서버가 메타 정보 파일을 찾을 디렉토리 이름.
# 이 파일에는 문서를 보낼 때 추가하고자 하는 추가 HTTP 헤더 정보가
# 들어있다.
#
#MetaDir .web
#
# MetaSuffix: 메타 정보를 담고 있는 파일의 접미어를 설정한다.
#
#MetaSuffix .meta
#
# 사용자 정의 에러 반응 메시지 (아파치 스타일)
#  다음 3 가지 방법으로 가능하다.
#
#    1) 보통의 텍스트
#ErrorDocument 500 "The server made a boo boo.
#  주목: " 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않는다.
#
ErrorDocument 500 /500.html
#
#    2) 지역적인 방향 전환
#ErrorDocument 404 /missing.html
#  지역적 URL인 /missing.html로 방향 전환하기
#ErrorDocument 404 /cgi-bin/missing_handler.pl
ErrorDocument 404 /404.html
#  주목: 스크립트나 SSI로 방향 전환시킬 수 있다.
#
#    3) 외부 방향 전환
#ErrorDocument 402 http://some.other_server.com/subscription_info.html
#  주목: 원래 요청과 관련있는 환경 변수의 상당수가 스크립트에
#  전달되지 못한다는 점을 알고 있어야 한다.
#
# 다음 지시자는 보통의 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
#
# http://servername/server-status을 통해 서버 상태 보고를 허용한다.
# 여기서 ".your_domain.com" 부분을 허용할 도메인으로 바꿔 사용하라.
#
#
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#

#
# http://servername/server-info를 통하여 원격 서버 설정 보고를 허용한다.
# (mod_info.c가 적재되어 있어야 한다.)
# 여기서 ".your_domain.com" 부분을 허용할 도메인으로 바꿔 사용하라.
#
#
#    SetHandler server-info
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#

#
# 1.1 버전 이전의 오래 된 버그를 악용하려는 사람들이 있다는 보고를 받았다.
# 이 버그는 아파치 일부분으로 제공한 CGI 스크립트와 연관있다.
# 이 부분의 주석 처리를 없애면 이 버그를 악용하는 공격이 있을 때
# phf.apache.org 상의 기록 스크립트로 방향 전환시킬 수 있다.
# 또는 support/phf_abuse_log.cgi 스크립트를 사용하여 여러분 직접 기록할
# 수도 있다.
#
#
#    Deny from all
#    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#

#
# 프록시 서버 지시자.  프록시 서버 기능을 작동시키려면 다음 행의
# 주석을 해제시켜준다.
#
#
#ProxyRequests On
#
#
#    Order deny,allow
#    Deny from all
#    Allow from .your_domain.com
#

#
# HTTP/1.1 "Via:" 헤더를 처리할 것인지 여부를 결정한다.
# ("Full"은 서버 버전을 포함하고 "Block"은 나가는 모든 자료에서
# Via: 헤더를 제거한다.)
# Off | On | Full | Block 중 하나의 값을 지정한다.
#
#ProxyVia On
#
# 캐쉬 기능도 사용하기 위해서는 다음 행의 주석을 풀어준다:
# (CacheRoot가 없으면 캐쉬하지 않음)
#
#CacheRoot "/home/httpd/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com

#

# 프록시 설정 끝

#############################################################################
### 섹션 3: 가상 호스트
#
# VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트이름을
# 관리하고 싶다면 각각에 대하여 VirtualHost 컨테이너를 설정한다.
# 가상 호스트를 설정하기에 앞서 자세한 설명을
# 에 들러 읽어보기 바란다.
# 가상 호스트 설정 내용을 점검해보기 위해서는 아파치를 실행할 때
# 명령행 옵션으로 '-S'를 사용한다.
#
# 이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 개,
# 그리고 포트 번호)를 정의해주어야 한다.
#
# 경고 : 아파치 1.2.x 버전에서만 가상 호스트 기능을 사용해 온 관리자들은
#        아파치 1.3.x 버전에서 NameVirtualHost 지시자로 IP 주소를
#        해주어야만 가상 호스트가 제대로 동작한다는 사실을 꼭 알아야 한다!!!
#        1.2 버전을 쓰다 1.3 버전으로 와서 가상 호스트가 동작하지 않는
#        문제의 99% 는 바로 NameVirtualHost 설정에 있다.
#
#
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
#
# 가상 호스트 예제:
# 거의 모든 아파치 지시자가 VirtualHost 컨테이너에 올 수 있다.
#
#
#    ServerAdmin webmaster@host.some_domain.com
#    DocumentRoot /www/docs/host.some_domain.com
#    ServerName host.some_domain.com
#    ErrorLog logs/host.some_domain.com-error_log
#    CustomLog logs/host.some_domain.com-access_log common
#

#
#


# --------------------------------------------------------------------------
#
# 가상 호스트 예제
#
# 192.168.1.1 이라는 하나의 IP 주소에 다음 두 가지 도메인 이름이
# 등록되어 있다고 하자.
#
# a) www.foo.com
# b) www.bar.com
#
# --------------------------------------------------------------------------
# NameVirtualHost 192.168.1.1
#
# # www.foo.com 설정
#
# ServerName www.foo.com
# DocumentRoot /home/foo
# ErrorLog logs/www.foo.com-error_log
# CustomLog logs/www.foo.com-access_log common
#

#
# # www.bar.com 설정
#
# ServerName www.bar.com
# DocumentRoot /home/bar
# ErrorLog logs/www.bar.com-error_log
# CustomLog logs/www.bar.com-access_log common
#

#
#
#

# --------------------------------------------------------------------------
##
##  SSL Global Context
##
##  All SSL configuration in this context applies both to
##  the main server and all SSL-enabled virtual hosts.
##
#
#   Some MIME-types for downloading Certificates and CRLs
#

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl



#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
SSLPassPhraseDialog  builtin

#   Inter-Process Session Cache:
#   Configure the SSL Session Cache: First either `none'
#   or `dbm:/path/to/file' for the mechanism to use and
#   second the expiring timeout (in seconds).
#SSLSessionCache        none
#SSLSessionCache        shm:/var/run/ssl_scache(512000)
SSLSessionCache         dbm:/var/run/ssl_scache
SSLSessionCacheTimeout  300

#   Semaphore:
#   Configure the path to the mutual explusion semaphore the
#   SSL engine uses internally for inter-process synchronization.
SSLMutex  file:/var/run/ssl_mutex

#   Pseudo Random Number Generator (PRNG):
#   Configure one or more sources to seed the PRNG of the
#   SSL library. The seed data should be of good random quality.
#   WARNING! On some platforms /dev/random blocks if not enough entropy
#   is available. This means you then cannot use the /dev/random device
#   because it would lead to very long connection times (as long as
#   it requires to make more entropy available). But usually those
#   platforms additionally provide a /dev/urandom device which doesn't
#   block. So, if available, use this one instead. Read the mod_ssl User
#   Manual for more details.
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512

#   Logging:
#   The home of the dedicated SSL protocol logfile. Errors are
#   additionally duplicated in the general error log file.  Put
#   this somewhere where it cannot be used for symlink attacks on
#   a real server (i.e. somewhere where only root can write).
#   Log levels are (ascending order: higher ones include lower ones):
#   none, error, warn, info, trace, debug.
SSLLog      /var/log/httpd/ssl_engine_log
SSLLogLevel info




##
## SSL Virtual Host Context
##



#  General setup for the virtual host
DocumentRoot "/home/httpd/html"
ServerName localhost
ServerAdmin webmaster@localhost
ErrorLog /var/log/httpd/error_log
TransferLog /var/log/httpd/access_log

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
#SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again. A test
#   certificate can be generated with `make certificate' under
#   built time. Keep in mind that if you've both a RSA and a DSA
#   certificate you can configure both in parallel (to also allow
#   the use of DSA ciphers, etc.)
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
#SSLCertificateFile /etc/httpd/conf/ssl.crt/server-dsa.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
#SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server-dsa.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convinience.
#SSLCertificateChainFile /etc/httpd/conf/ssl.crt/ca.crt

#   Certificate Authority (CA):
#   Set the CA certificate verification path where to find CA
#   certificates for client authentication or alternatively one
#   huge file containing all of them (file must be PEM encoded)
#   Note: Inside SSLCACertificatePath you need hash symlinks
#         to point to the certificate files. Use the provided
#         Makefile to update the hash symlinks after changes.
#SSLCACertificatePath /etc/httpd/conf/ssl.crt
#SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca-bundle.crt

#   Certificate Revocation Lists (CRL):
#   Set the CA revocation path where to find CA CRLs for client
#   authentication or alternatively one huge file containing all
#   of them (file must be PEM encoded)
#   Note: Inside SSLCARevocationPath you need hash symlinks
#         to point to the certificate files. Use the provided
#         Makefile to update the hash symlinks after changes.
#SSLCARevocationPath /etc/httpd/conf/ssl.crl
#SSLCARevocationFile /etc/httpd/conf/ssl.crl/ca-bundle.crl

#   Client Authentication (Type):
#   Client certificate verification type and depth.  Types are
#   none, optional, require and optional_no_ca.  Depth is a
#   number which specifies how deeply to verify the certificate
#   issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth  10

#   Access Control:
#   With SSLRequire you can do per-directory access control based
#   on arbitrary complex boolean expressions containing server
#   variable checks and other lookup directives.  The syntax is a
#   mixture between C and Perl.  See the mod_ssl documentation
#   for more details.
#
#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \
#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#


#   SSL Engine Options:
#   Set various options for the SSL engine.
#   o FakeBasicAuth:
#     Translate the client X.509 into a Basic Authorisation.  This means that
#     the standard Auth/DBMAuth methods can be used for access control.  The
#     user name is the `one line' version of the client's X.509 certificate.
#     Note that no password is obtained from the user. Every entry in the user
#     file needs this password: `xxj31ZMTZzkVA'.
#   o ExportCertData:
#     This exports two additional environment variables: SSL_CLIENT_CERT and
#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
#     server (always existing) and the client (only existing when client
#     authentication is used). This can be used to import the certificates
#     into CGI scripts.
#   o StdEnvVars:
#     This exports the standard SSL/TLS related `SSL_*' environment variables.
#     Per default this exportation is switched off for performance reasons,
#     because the extraction step is an expensive operation and is usually
#     useless for serving static content. So one usually enables the
#     exportation for CGI and SSI requests only.
#   o CompatEnvVars:
#     This exports obsolete environment variables for backward compatibility
#     to Apache-SSL 1.x, mod_ssl 2.0.x, Sioux 1.0 and Stronghold 2.x. Use this
#     to provide compatibility to existing CGI scripts.
#   o StrictRequire:
#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even
#     under a "Satisfy any" situation, i.e. when it applies access is denied
#     and no other module can change it.
#   o OptRenegotiate:
#     This enables optimized SSL connection renegotiation handling when SSL
#     directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire

    SSLOptions +StdEnvVars


    SSLOptions +StdEnvVars


#   SSL Protocol Adjustments:
#   The safe and default but still SSL/TLS standard compliant shutdown
#   approach is that mod_ssl sends the close notify alert but doesn't wait for
#   the close notify alert from client. When you need a different shutdown
#   approach you can use one of the following variables:
#   o ssl-unclean-shutdown:
#     This forces an unclean shutdown when the connection is closed, i.e. no
#     SSL close notify alert is send or allowed to received.  This violates
#     the SSL/TLS standard but is needed for some brain-dead browsers. Use
#     this when you receive I/O errors because of the standard approach where
#     mod_ssl sends the close notify alert.
#   o ssl-accurate-shutdown:
#     This forces an accurate shutdown when the connection is closed, i.e. a
#     SSL close notify alert is send and mod_ssl waits for the close notify
#     alert of the client. This is 100% SSL/TLS standard compliant, but in
#     practice often causes hanging connections with brain-dead browsers. Use
#     this only for browsers where you know that their SSL implementation
#     works correctly.
#   Notice: Most problems of broken clients are also related to the HTTP
#   keep-alive facility, so you usually additionally want to disable
#   keep-alive for those clients, too. Use variable "nokeepalive" for this.
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

#   Per-Server Logging:
#   The home of a custom SSL log file. Use this when you want a
#   compact non-error SSL logfile on a virtual host basis.
CustomLog /var/log/httpd/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

                                 



자 설정이 끝났으면 데몬을 재실행하자(윈도우에서 프로그램 설치 후 리부팅하는
것을 기억하는가
리눅스에서는 데몬에 관한 내용을 설정 후 데몬을 재 실행 시켜야만 한다.)
[root@rootshell /root]# /etc/rc.d/init.d/httpd  stop
shutting down HTTPD                                 [ok]
[root@rootshell /root]# /etc/rc.d/init.d/ httpd start
starting HTTPD                                      [ok]


(참고)web server실행시 다음의 것에 주의 하라.

  -기본문서index.html생성
  -index.html의 상위 디렉토리에 실행퍼미션 생성(755)
  -데몬 중단 실행

이것으로 httpd.conf의 설정을 마치겠다. 상당히 어려운 부분도 있었을 것이다.
그래서 신경을 써야 하는 부분에는 색깔로 글씨를 썼다. 가상 호스팅에 대한 부분은
다음에 다루겠다. 자 이제 /usr/local/etc/httpd/htdocs/index.html이라는
페이지를 뛰우고 로딩해 보자!!!

'I.lib() > I.lib(Apache)' 카테고리의 다른 글

httpd.conf 과거 자료  (0) 2011.08.01
httpd-default.conf 설정 설명  (0) 2011.08.01
아파치 설정중 KeepAlive 란?  (0) 2011.07.29
http.conf 설정  (1) 2011.07.28
APACHE(아파치) API - Commons Lang 2.5 API  (0) 2010.05.27
.
:
Posted by .07274.
2011. 7. 29. 16:54

아파치 설정중 KeepAlive 란? I.lib()/I.lib(Apache)2011. 7. 29. 16:54

.. .. ..

KeepAlive On

이넘은 아파치 config의 한귀퉁이에 요즘 것들은 extra 로 별도의 config에 들어 있는데...

이넘을 통해서 엄청난 접속이 발생할 때 원할한 문제해결책을 제시한다.

평상시엔 KeepAlive On으로 해 놓는게 나으나

폭주시엔 KeepAlive Off 로 처리해 두면 프로세스의 사용량을 현저히 줄어들도록 해준다는 것이다.

KeepAlive 란 뭔가.. 이넘은 접속을 유지해주는 역할을 한다.

메모리의 여유가 많다면 On 해두어도 크게 문제가 없지만

메모리의 여유가 없다면 Off해두어야 이후 문제가 발생하지 않는다.

특히 수강신청과 같이 동시간에 수많은 사람들이 리프레쉬 하려고 기다리고 있다면 더더욱... 그러하다.

.
:
Posted by .07274.
2011. 7. 28. 17:14

http.conf 설정 I.lib()/I.lib(Apache)2011. 7. 28. 17:14

.. .. ..
# 1) 문제가 발생했을 때에는 httpd.conf (srm.conf, access.conf) 설정 파일의
# 문법을 제대로 지켰는지 먼저 점검.
#
# /usr/sbin/httpd 명령에 -t 옵션을 주면 문법만 점검합니다.
#
# 예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’ ....

# 지시자는 3 개의 기본적인 섹션으로 묶여 있다:
#
# 1. 아파치 서버 프로세스의 전반적인 작동을 제어하는 지시자
# ('global environment, 전체 환경')
#
# 2. 가상 호스트에 의해 처리되지 않는 요청을 모두 처리하는 주 서버 또는
# 기본 서버의 작동을 제어하는 지시자. 이 지시자 내용은 모든 가상 호스트의 기본값이기도 하다.
# 3. 다른 IP 주소 또는 다른 호스트 이름에 대한 요청을 처리할 가상 호스트 설정
# 서버 유형(ServerType)은 inetd 또는 standalone 둘 중 하나이다.
# inetd 방식은 유닉스 플랫폼에서만 지원된다.
ServerType standalone
# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이
# 기록되는 디렉토리의 최상위 경로명.
# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!
ServerRoot "/etc/httpd"

# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을
# 차례대로 읽어나간다. 나중에 있는 2 개의 파일은 현재 아무 내용도
# 없는 빈 상태로 배포되고 있다. 왜냐하면 모든 지시자를 그냥 하나의
# 파일에 적는 것이 더욱 명료하기 때문이다.
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

#
# Timeout: 받기/보내기 타임 아웃 시간
#
Timeout 300

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

# MaxKeepAliveRequests: 접속 기간 동안 처리할 수 있는 최대 요
# 청 개수 0 을 넣으면 무한대이다. 높은 성능을 내기 위해서 높은
# 값을 추천한다.
MaxKeepAliveRequests 100

# KeepAliveTimeout: 같은 접속 상태에서 같은 클라이언트의 요청이
# 타임 아웃되는 시간 (초 단위)
KeepAliveTimeout 15

# 아파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지 점검한
#다.
# 만약 MinSpareServers 보다 적다면 여유 서버 프로세스를 생성한다.
# 만약 MaxSpareServers 보다 많으면 불필요한 여유 프로세스를 제거한다.
MinSpareServers 8
MaxSpareServers 20

# 처음 시동할 때 만들 서버의 갯수 -- 합리적인 근사치여야 한다.
StartServers 10

# 서버 프로세스의 최대값, 즉 동시에 접속할 수 있는 클라이언트 갯수를
# 제한하는 값이다.
MaxClients 150

# MaxRequestsPerChild: 각 자식 프로세스가 죽기 전까지 처리할 수 있는
# 요청 갯수. 메모리 누출이나 자원 누출 방지
MaxRequestsPerChild 100

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

# BindAddress: 이 옵션을 사용하여 가상 호스트를 지원할 수 있다.
# 이 지시자를 이용하여 서버가 귀기울일 IP 주소를 지시할 수 있다.
# <VirtualHost>, Listen 지시자도 참고하라.
#
#BindAddress *

# 동적 공유 객체(Dynamic Shared Object, DSO) 지원
# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련
#된 지시자를 사용하기에 앞서 알맞게 `LoadModule' 지시자로 모듈을 지시
#해주어야 한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은 아파치
#1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는 httpd 바
#이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을 알고 싶
#을 때에는 `httpd -l' 명령을 실행한다.
#
# 주의: 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이
# 아무렇게나 순서를 바꾸지 말라.
#
# 모듈 관련 문서는 HTML 형식으로 "/home/httpd/manual/mod" 에 있음
# 주의: LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라 나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.
LoadModule env_module modules/mod_env.so .....

# 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지
# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를
# (ExtendedStatus Off) 제어한다. 기본값은 Off 이다.
#
#ExtendedStatus On

# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.
# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는
# root 권한으로 실행되어야 한다.
Port 80

#
# httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은
# httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자
# 권한으로 전환해야 한다.
#
User nobody
Group nobody

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

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

# DocumentRoot: 제공할 문서의 상위 디렉토리.
DocumentRoot "/home/httpd/html"

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

None : 어떤 옵션도 사용할 수 없다.
All : MultiViews 옵션을 이용할 수 있다.
Indexes : URL에 지정된 디렉토리에 지정된 파일(ex.index.html)이 없을 경우 디렉토리 목록을 보여준다.
Includes : 서버측의 추가적인 정보를 제공
FollowSymLinks : 디렉토리 상의 심볼릭 링크를 사용가능케 함
FollowSymLinksIfOwnerMatch : 디렉토리 상의 심볼릭 링크를 사용가능케 함(Owner가 매칭되었을때만!)
ExecCGI : CGI 스크립트를 실행할 수 있게끔 함
MultiViews : All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용한다.

<Directory "/home/httpd/html">
# 다음 값에는 "None", "All", 또는 "Indexes", "Includes", "FollowSymLinks", "ExecCGI", "MultiViews"의 자유로운 조합이 가능하다.
Options Indexes FollowSymLinks Includes
# 다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤 옵션을 마음대로 제어할 수 있는지 결정한다. "All" 또는 "Options", "FileInfo", "AuthConfig", "Limit"의 자유로운 결합이 가능하다.
AllowOverride None

# 서버로부터 자료를 얻어갈 수 있는 위치(ex. IP등)를 제어한다.
Order allow,deny
Allow from all
</Directory>

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

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


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

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

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

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

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

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

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

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

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

# LogLevel: error_log에 기록될 메시지 분량을 제어한다. debug, info, notice, warn, error, crit, alert, emerg 등의 값이 가능하다.
# 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 logs/access_log common
# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는 다음 지시 내용의 주석 처리를 해제하라. 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다. 에이전트 로그를 남기면 여러분의 사이트에 방문하는 브라우져의 종류에 대한 통계를 낼 수 있다. ( 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로 직전에 방문한 사이트를 말한다. )
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는 (통합 로그파일 형식) 다음 지시 내용을 사용하라. 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!
#
#CustomLog logs/access_log combined

# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록, mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다. "Email"로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.
# On | Off | EMail 중 하나로 설정한다.
#ServerSignature On
# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음) 형식은 다음과 같다.
# Alias 가짜이름 실제이름
# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야 처리함을 잘 알아두자. 따라서 "/icons"는 별칭 처리되지 않고 "/icons/"만 별칭 처리된다.
Alias /icons/ "/home/httpd/icons/"

<Directory "/home/httpd/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# ScriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다. ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다. 맨 뒤에 붙는 "/" 에 대한 규칙은 Alias와 마찬가지이다.
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"

# "/home/httpd/cgi-bin" 부분은 ScriptAlias로 별칭 처리된 실제 CGI 디렉토리로 설정해야 한다.
<Directory "/home/httpd/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
# localhost에서는 지역 시스템 문서를 접근할 수 있도록 허용한다. (레드햇 리눅스 6 설정으로부터 인용)
Alias /doc /usr/doc
<Directory /usr/doc>
order deny,allow
deny from all
allow from localhost
Options Indexes FollowSymLinks
</Directory>

# Redirect를 사용하면 서버의 이름공간에 존재했으나 현재에는 존재하지 않는 문서에 대하여 클라이언트에게 통보할 수 있도록 해준다. 이렇게 함으로써 위치가 변한 새로운 문서를 어디에서 찾을 수 있는지 클라이언트에게 알려줄 수 있다.
# 형식: Redirect 예전URI 새URI
# 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/*
....
# DefaultIcon이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한 기본 아이콘 파일을 설정한다.
DefaultIcon /icons/unknown.gif

# AddDescription은 서버 자동 생성 인덱스의 파일명 뒤에 간단한 설명을 넣을 때 사용한다. FancyIndexing을 사용할 때에만 보인다.
# 형식: AddDescription "설명" 화일명
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
#
# ReadmeName은 서버가 디렉토리 목록 뒤에 내용을 덧붙여 넣을 README 파일의 이름을 설정한다. HeaderName은 디렉토리 인덱스 앞에 내용을 덧붙일 파일명을 설정한다. 서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다. 만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로 추가한다.
ReadmeName README
HeaderName HEADER

# IndexIgnore는 디렉토리 인덱싱에 있어 목록에서 제외시킬 파일명을 설정한다. 쉘 스타일의 와일드 카드를 사용할 수 있다.
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
# AddEncoding은 특정 브라우져(모자익/X 2.1+)로 하여금 자료를 받으면서 정보의 압축을 풀 수 있도록 해준다. 주의: 모든 브라우져가 이 기능을 지원하는 것은 아니다. 이름이 유사하기는 하지만 다음부터 나오게 될 Add로 시작하는 지시자들은 FancyIndexing과는 관련이 없다.
AddEncoding x-compress Z
AddEncoding x-gzip gz

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

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




# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다. 예를 들어, PHP3 모듈(아파치 배포파일에 포함되어 있지 않다)에 대해서는 다음과 같이 사용한다.
#AddType application/x-httpd-php3 .php3
#AddType application/x-httpd-php3-source .phps

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

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

# CGI 스크립트를 사용하기 위해:
AddHandler cgi-script .cgi
# 서버 처리 HTML 파일 사용하기 위해:
AddType text/html .shtml
AddType text/html .htm
AddHandler server-parsed .shtml

# 아파치의 send-asis HTTP 파일 기능을 사용하기 위해서는 다음 행의 주석을 없앤다.
#AddHandler send-as-is asis

# 서버 처리 이미지 맵 파일을 사용하려면...
AddHandler imap-file map
...

# 프록시 서버 지시자. 프록시 서버 기능을 작동시키려면 다음 행의 주석을 해제시켜준다.
#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Directory proxy:*>
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Directory>

# HTTP/1.1 "Via:" 헤더를 처리할 것인지 여부를 결정한다. ("Full"은 서버 버전을 포함하고 "Block"은 나가는 모든 자료에서 Via: 헤더를 제거한다.)
# Off | On | Full | Block 중 하나의 값을 지정한다.
#ProxyVia On

# 캐쉬 기능도 사용하기 위해서는 다음 행의 주석을 풀어준다: (CacheRoot가 없으면 캐쉬하지 않음)
#CacheRoot "/home/httpd/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
#</IfModule>



-------------------------------------
httpd.conf test
/usr/sbin/httpd -t
Binary 직접 실행
/usr/sbin/httpd
Script로 실행
/etc/rc.d/init.d/httpd start|stop|restart
.
:
Posted by .07274.
.. .. ..

'I.lib() > I.lib(Apache)' 카테고리의 다른 글

httpd.conf 과거 자료  (0) 2011.08.01
httpd-default.conf 설정 설명  (0) 2011.08.01
웹서버 설정 (httpd ) 관련 Study 문서 (좋은 자료)  (0) 2011.07.29
아파치 설정중 KeepAlive 란?  (0) 2011.07.29
http.conf 설정  (1) 2011.07.28
.
:
Posted by .07274.