Computer/LINUX

httpd.conf

알찬돌삐 2012. 8. 10. 16:19

 

http://www.superuser.co.kr/apache/apache2_manual/howto/public_html.html

 

 ServerType   Standalone
# 서버 타입을 설정하는 지시자 이다. 
# ServerType 에서 설정할 수 있는 것은 Standalone 과 inetd 두가지 설정이 있다.

ServerRoot  /usr/local/apache
# 아파치 서버의 루트 디렉토리를 설정한다.

PidFile  /usr/local/apache/logs/httpd.pid 
# 아파치가 실행될 때 생성되는 httpd.pid 파일이 생성될 경로를 지정한다.

ScoreBoardFile  /usr/local/apache/logs/httpd.scoreboard #부모 프로세스가 자식 프로세스와 의사 소통을 할 때 사용되는 지시자와 그 파일을 지정한다.

Timeout    300
# Timeout은 클라이언트에서 서버로 접속할 때 클라이언트나 서버의 통신장애로 인해 300초 동안 클라이언트에서
# 완벽한 처리를 하지 못할 때 클라이언트와의 연결을 해제한다.

KeepAlive  On # 서버와의 지속적인 연결을 하도록 설정되어 있다. 즉 한번의 연결에 대해 한번의 요청만 처리하는 것이 아니라 또 다른 
# 요청을 기다리게 된다. 하지만 지속적인 연결 시간은 KeepAliveTimeout 값에 설정한 만큼 유지된다.
# KeepAlive를 Off로 설정하게 되면 클라이언트로 부터 한번의 요청을 받은 후 바로 접속을 해제한다. 
# 특별한 경우가 아니라면 On 상태로 유지하는 것이 좋다.

more..


MaxKeepAliveRequests    100 # KeepAlive 상태에서 처리할 최대 요청 처리 건수를 설정한다. 
# 보통의 웹 사이트에서는 설정값 100으로 충분하다.
# 서버가클라이언트와의접속을유지하면서최대클라이언트로부터받을수있는요청의수이다
# 즉 한번 연결후에 클라이언트에서 번의 요청을 받았다면 자동으로 설정을 끊는것이다
# 0 으로설정을하는것은클라이언트에서스스로접속을끊을때까지모든요청을받는다는것이다
# 웹사이트가 복잡하게 되어있는 웹서버에서는 이 값을 늘여주는 것이 좋다

more..


KeepAliveTimeout   15 # KeepAlive 상태를 유지할 시간을 초 단위로 설정한다.
# 접속이 유지된다고 해도 하루종일되어있다면 동시접속자 제한에 걸려서웹서버의 접속을 할수없게된다.
# 이때 설정해 주는값으로 지정된 시간동안 요청이 없으면 서버에서 연결을 끊어버리게되어 다른 접속자가
# 웹서버에 접속 할 수 있도록 설정 해주는것이다 .
# 동시접속자가 많을때 웹서버 성능을 너무 떨어뜨리지 않게 하기 위해서 를 으로 설정해놓고 이 값을 줄여주는 방
# 법도 있다

more..


MinSpareServers   5
# 아파치가 실행될 때 최소 예비 프로세스 수를 설정한다. 이 값에 의해 현재 nobody 소유의 아파치 프로세스가 5보다 
# 작을 경우 자동으로 부족한 만큼의 아파치 프로세스 생성한다.
# 8 정도 설정하는 것이 적당하다.
# 접속자가 많은 경우는 10~15 정도로 설정하자.

more..


MaxSpareServers  10
# 아파치가 실행될 때 최대 예비 프로세스 수를 설정한다. 이 값에 의해 현재 nobody 소유의 아파치 프로세스가 10보다
# 클 경우 불필요한 프로세스를 제거한다. 
# 20 정도 설정하는 것이 적당하다.
# 접속자가 많은 경우는 40-50 으로 설정하자.

StartServers   5
# 아파치가 실행될 때 생성 시키는 자식 프로세스 수이다. 
# 하지만 이 값이 MinSpareServers 값보다 작을 경우 아파치 실행 후에 바로 MinSpareServers 의 설정만큼 생성하기
# 때문에 아무런 의미가 없게 된다. StartServer 값과 MinSpareServers 값은 같은 값을 설정하는것이 바람직하다.

more..


MaxClients   150
# 아파치 서버의 동시 접속자 수를 정의한다. 
# 최대 값은 256이다.  
# 256 이상의 값을 설정하고 싶을 때는 아파치 소스의 httpd.h 헤어 파일의 HARD_SERVER_LIMIT 부분을 수정하고 
# 아파치를 다시 컴파일 해야 된다.

more..


MaxRequestsPerChild   0 # 아파치의 자식 프로세스가 처리할 수 있는 최대 요청 처리 건수를 설정한다.
# 0 은 무제한을 뜻한다.
# 한 자식 프로세서당 처리 할 수 있는 최대 요청수는 0으로, 자식프로세서가 죽지않으므로 속도향상을 기대 할 수는
# 있으나 잘못된 프로그래밍이나 코드수행으로 인해서 문제가 발생할경우에는 서버전체에 부하를 유발 할 수가 있다
# 보통 정도로 설정하고 사이트가 복잡하거나 요청이 많아야 할 경우에는 500-1000등으로 수치를 올려준다.

more..


BindAddress   *
# 가상 호스트를 지워한다. 기본적으로 주석 처리 되어 있지만 실제로는 가상 호스트에 영향을 주지 않았다.

Port      80
# 아파치가 사용할 기본 포트를 지정한다. 


User   nobody
Group  nobody

# 자식 프로세스가 생성될 때 그 프로세스의 소유자와 소유그룹을 결정한다. 
# 보안상 절대 root 로 설정하는 일은 없도록 한다.

ServerAdmin    admin@rootman.co.kr
# 아파치 서버 관리자 e-mail을 설정하는 부분이다.

ServerName    rootman.co.kr # 아파치 서버가 작동중인 서버 이름을 설정한다. 기본적으로 주석 처리 되어 있다.
# 도메인이 아닌 IP 주소로 사용자의 홈페이지에 접속할 때 URL 끝에 /를 붙여야 접속이 되는 경우가 있는데 이럴 경우
# ServerName 지시자에 주석을 제거 하고 아이피 주소를 설정해 주면 된다.

DocumentRoot    "/usr/local/apache/htdocs" #아파치의 웹 문서들의 루트 디렉토리를 지정한다.
# 아래 부터 디렉토리 제어이다.  Directory 구문에 대한 자세한 설명은 아래에 있다.
# 시스템 루트( / ) 디렉토리에 대한 제어
<Directory />                                              
   Options FollowSymLinks                         
   AllowOverride None                                
</Directory>
                                             

# /usr/local/apache/htdocs 디렉토리에 대한 제어
<Directory   " /usr/local/apache/htdocs">     
   Options Indexes FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>


# 사용자 홈 디렉토리인 public_html 디렉토리에 대한 제어
<Directory /home/*/public_html>
  AllowOverride FileInfo AuthConfig Limit
  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
  <Limit GET POST OPTIONS PROPFIND>
      Order allow,deny
      Allow from all
  </Limit>
  <LimitExcept GET POST OPTIONS PROPFIND>
      Order deny,allow
      Deny from all
  </LimitExcept>
</Directory>



################################################################
                              디렉토리 제어와 관련된 설정과 옵션 설명                                 
################################################################
디렉토리를 제어할때에는 <Directory>~</Directory>의 형태로 작성하며 각각의 디렉토리에 대한 권한과 여러 가지 설정을 할 수가 있으며 이때 사용되는 옵션에 대해서 알아보자 

# -->> Options(옵션) 설명 ;
옵션 구문은 Options 라는 키워드로 시작된다.
None : 어떤 옵션도 이용할수 없음을 나타낸다 모든 접근 불가(모든 설정을 부정한다.)

All : MultiViews를 제외한 옵션을 의미한다.  

Indexes : httpd.conf 설정에서 DirectoryIndex에 설정되어있는 파일이 해당 URL에 없을 경우에 디렉토리의 파일 목록을 보여준다 보안상 사용하지 않는 것이 좋다.

Includes : 서버측에 추가적인 정보를 제공할수 있도록 한다. shtml,SSL 파일 사용시 적용

FollowSymLinks : 디렉토리의 심볼릭 링크를 사용할수 있도록 한다

ExecCGI : CGI 실행을 허용한다.

MultiViews : 클라이언트의 요청에 따라 적절하게 페이지를 보여준다. 쉽게 생각하면 HTTP 헤드 정보가 Accept-Language:ko 라면 Korea 언어에 맞게 데이터를 클라이언트에 전송한다.

Order : 서버가 access 컨트롤을 수행하는 순서를 지정한다.  
Order allow,deny (allow 기능을 먼저 수행하고 deny 기능을수행한다)

Allow from : 나열되는 주소들에 대한 access 컨드롤을 허용한다
사용가능한 설정은 도메인명 호스트명 이모든 것을 허용하는 "all" 이있다.
Allow from all [222.xxx.xxx.xxx 222.xxx.xxx.xxx alov.co.kr]

Deny from : 나열되는 주소들에 대한 access 컨드롤을 제한한다
Deny from all [222.xxx.xxx.xxx 222.xxx.xxx.xxx alov.co.kr]

requre : 사용자그룹에대한접근을통제한다
require user [group vaild-user] <ID>
user - 지정된 사용자들에게만 접근 허용. AuthUserFile에서 지정
group - 지정된 그룹에게만 접근을 허용. AuthGroupFile에서 지정
valid-user - AuthUserFile에 있는 모든 사용자 들에게 접근을 허용

SymLinksIfOwnerMatch : 링크를 허용하지만 링크 하고자 하는 사용자의 소유로 되어 있는 것만 링크 가능하다.

IncludesNOEXEC : SSI를 허용하지만 "#exec" 와 "include"로 정의한 CGI 실행은 거부한다.



# -->> AllowOverride 설명
AllowOverride는 클라이언트의 디렉토리 접근 제어에 관한 설정이다. 
AllowOverride 는 AccessFileName 지시자와 밀접한 관계를 가지고 있다. 
아래의 각 설정값들은 AccessFileName 지시자에서 설정한 파일에 적용된다.
None : AllowOverride를 off 한다는 것이다. 

All : AccessFileName 지시자로 설정한 파일에 대해 민감하게 반응한다. 모든 지시자를 사용할 수 있다.

AuthConfig : AccessFileName 지시자에 명시한 파일에 대해서 사용자 인증 지시자 사용을 허락한다.
--> AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require등을 사용할 수 있다. 

FileInfo : AccessFileName 지시자로 설정한 파일에 대해서 문서 유형을 제어하는 지시자 사용을 허락한다.
--> AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority등을 사용할 수 있다.

Indexes : AccessFileName 지시자로 설정한 파일에 대해서 디렉토리 Indexing을 제어하는 지시자 사용을 허락한다.
--> AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOpions, ReadmeName등을 사용할 수 있다.

Limit : AccessFileName 지시자로 설정한 파일에 대해서 호스트 접근을 제어하는 지시자 사용을 허락한다. 
--> Allow, Deny, order 등을 사용할 수 있다.

Options : AccessFileName 지시자에 명시한 파일에 대해서 Options 그리고 XBiHack 등과 같은 지시자 사용을 허락한다.
--> Options, XBitHack등을 사용할 수 있다.

AloowOverride와 AccessFileName에 설정한 파일을 이용해서 아파치 인증 기능을 사용할 수 있다.
아파치 인증에 관한 자세한 설명은 "아파치 인증" 강좌를 참고하길 바란다. 
################################################################

DirectoryIndex     index.html index.htm index.php index.php3# 클라이언트가 웹서버에 대한 요청이 있을때 해당 도메인이 디렉토리 안에서 가장 먼저 읽을 파일을 지정한다
# 파일 이름을 명시하지 않고 디렉토리에 접근할 경우 자동으로 보여줄 파일 이름을 설정한다. 
# 여러개의 파일 이름을 설정할 수 있다. 파일 이름에 대한 구분은 Space 키,  즉 빈 공간으로 구분한다.

AccessFileName    .htaccess
# 특정 디렉토리의 접근 제어를 할 파일 이름을 정의한다.
# 단, 해당 디렉토리의 AllowOverride 에서 None으로 설정되어 있지 않아야 된다.
# 자세한 설명은 "아파치 인증" 강좌 참고

CacheNegotiatedDocs
# 프록시 서버에 문서를 캐시하도록 설정한다. 기본적으로 주석 처리 되어 있다.

HostnameLookup    Off
# 아파치의 로그 파일에는 기본적으로 클라이언트의 IP 주소 정보가 기록되는데 이 설정을 On 하면 호스트 네임(도메인)
# 이 기록된다. 하지만 DNS 질의를 해야 되므로 속도가 느리다는 단점이 있다. 
# 그냥  Off로 사용하는것을 추천한다.

ErrorLog   /usr/local/apache/logs/error_log
# 아파치 서버 접속 에러 로그를 기록할 결로와 파일 이름을 설정한다.

LogLevel   warn # 에러 로그 내용의 레벨을 설정한다.

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
  
# 사용자 접속을 기록할 로그 포멧을 정의한 부분이다. 위와 같이 4가지 형식의 로그 포멧이 기본적으로 설정되어 있다.
common : 가장 일반적인 로그 기록
referer : 현재 아파치 서버에 접속하기 전에 머물렀던 URL으 기록한다.
agent : 접속자의 웹 브라우저(OS 포함) 종류를 기록한다.
combined : 위의 3가지 로그 포멧을 모두 조합한 것이다. 
          접속자에 대한 많은 정보를 기록하길 원한다면 combined으로 설정하면 된다.
# %h %I 등과 같은 아파치 로그 포멧을 알고 싶으면 아파치 메뉴얼를 참고 하기 바란다.

CustomLog    /usr/local/apache/logs/access_log common
# 로그 파일의 경로와 파일 이름,  그리고 로그의 포맷을 설정한다. 
# common 이외에 위에서 정의한 로그 포멧을 지정할 수 있다.

ServerSignature  On # apache 서버가 생성하는 Error 페이지와 Ftp 디렉토리 목록, mod_status, mod_info 등에 apache 서버 버젼과 가상 호스트 네임을 추가적으로 표시해 준다.(On 설정시)  Email 설정시 ServerAdmin의 E-mail 주소를 페이지에 링크해 준다. 
# On, Off, Email을 설정해서 사용할 수 있다. 

Alias  /icons/  "/usr/local/apache/icons/" # 특정 디렉토리를 alias 한다. 위의 경우는 /usr/local/apache/icons/ 디렉토리를 icons 라는 이름으로 alias 한것이다 
# icons 디렉토리 앞의 /(슬래쉬)는 DocumentRoot를 의미한다. 

ScriptAlias  /cgi-bin/  "/usr/local/apache/cgi-bin/" # Alias와 같은 형식이고 실행할 스크립트 디렉토리를 alias할 때 사용한다. 

Redirect  old-URL  new-URL
# old-URL을 new-URL로 코딩해준다. 하지만 HTML태그로 위의 기능을 대신할 수 있기때문에 사용할 일이 거의 없을것이다. 


IndexOptions Fancy Indexing
# 디렉토리에 DirectoryIndex에 설정된 파일명이 없을경우 아파치서버는 디렉토리목록을 보여주는데 Fancy Indexing을 설정
# 할 경우 파일의 크기, 생성날짜 등을 같이 출력해준다.

DefaultIcon /icons/unknown.gif # 아이콘이 설정되어 있지 않은 파일 확장자들의 아이콘을 대신한다

AddDescription "GZIP compressed document"  .gz
AddDescription "tar archive"  .tar
AddDescription "GZIP compressed tar archive" .tgz
# 아파치가 디렉토리 목록을 보여줄 경우 파일 확장자에 대해 간략한 설명을 할 수 있게 한다. 단, IndexOptions에서 
# FancyIndexing이 적용되어 있어야 된다.

ReadmeName README
HeaderName HEADER
# 아파치가 디렉토리가 목록을 보여줄 경우 페이지 위(HEADER)와 아래(README)에 추가로 출력할 텍스트들을 설정할 수 있다.
# 각 디렉토리에 README, HEADER 라는 이름으로 텍스트 파일을 만들면 된다.

ErrorDocument 500  "The server made a boo bo"
ErrorDocument 404  /missing.html
ErrorDocument 402  http://some.other_server.com/subscription_info.html 
# 클라이언트의 요구에 의해 발생하는 아파치 서버의 에러페이지에 출력할 텍스트나 문서를 정의할 수 있다.
# 각 페이지는 에러 코드별로 설정할 수 있으며 외부의 URL을 지정할 수도 있다.
# 문자열을 설정을 경우네는 " "안에 문자열을 설정하면 되고 내부 html 문서를 지정해줄 경우에는 문서의 경로를 지정해 
# 주면 된다. 단, (/)최상위 경로는 DocumentRoot를 의미한다.

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from .your_domain.com
</Location>
<Location /server-info>
  SetHandler server-info
  Order deny,allow
  Deny from all
  Allow from .your_domain.com
</Location>          
# 위의 설정을 함으로써 웹 브라우저에서 아파치 서버의 상태와 정보를 볼수 있다. 보안상 특정 호스트에서만 볼 수 있게 
# 설정할 수 있으며 기본적으로 주석 처리되어 있다.

<Location /cgi-bin/phf*>
   Deny from all
   ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>

# 아파치 1.1 이전 버젼의 버그를 악용하는 경우가 있는데 이 설정에 해 두면 이러한 공격을 phf.apache.org의 로깅 스키립트로 리다이렉트 시켜준다. 요즘은 필요없는 설정이고 위의 URL에 cgi스크립트가 존재하지도 않는다.

DefaultType text/plain # 아파치가 처리할 기본 문서들을 정의한다. 위의 설정은 html과 text 파일을 포함시킨 것이다.
# 위의 설정 때문에 text 파일도 웹 브라우저에 표시해 줄수 있는 것이다.

#프록시 서버 과련 설정은 제외 시켰습니다. 차후에 프록시 서버 강좌에서 다룰 예정입니다

 

참조사이트 : http://www.testmaster.info/entry/httpdconf

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > LINUX' 카테고리의 다른 글

mod_cband (apache 2.x) 다른거  (0) 2012.08.10
mod_cband (apache 2.x)  (0) 2012.08.10
HTTP response  (0) 2012.08.10
HTTP Request  (0) 2012.08.10
HTTP ERROR  (0) 2012.08.10