Web Server 의 대표격이라고 할 수 있는 Apache 의 기본 설치 및 설정파일에 대한 분석 내용입니다.

아래 글의 기준은 Amazon Linux 에서 Yum 으로 설치하였을때의 기준입니다. 


[root@ip-10-90-10-49 ~]# yum install httpd

Loaded plugins: priorities, update-motd, upgrade-helper

amzn-main                                                                                                                                                                                                             | 2.1 kB  00:00:00

amzn-updates                                                                                                                                                                                                          | 2.3 kB  00:00:00

Resolving Dependencies

--> Running transaction check

---> Package httpd.x86_64 0:2.2.32-1.9.amzn1 will be installed

--> Processing Dependency: httpd-tools = 2.2.32-1.9.amzn1 for package: httpd-2.2.32-1.9.amzn1.x86_64

--> Processing Dependency: apr-util-ldap for package: httpd-2.2.32-1.9.amzn1.x86_64

--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.2.32-1.9.amzn1.x86_64

--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.2.32-1.9.amzn1.x86_64

--> Running transaction check

---> Package apr.x86_64 0:1.5.1-1.12.amzn1 will be installed

---> Package apr-util.x86_64 0:1.4.1-4.17.amzn1 will be installed

---> Package apr-util-ldap.x86_64 0:1.4.1-4.17.amzn1 will be installed

---> Package httpd-tools.x86_64 0:2.2.32-1.9.amzn1 will be installed

--> Finished Dependency Resolution


Dependencies Resolved


=============================================================================================================================================================================================================================================

 Package                                                   Arch                                               Version                                                         Repository                                                Size

=============================================================================================================================================================================================================================================

Installing:

 httpd                                                     x86_64                                             2.2.32-1.9.amzn1                                                amzn-updates                                             1.2 M

Installing for dependencies:

 apr                                                       x86_64                                             1.5.1-1.12.amzn1                                                amzn-main                                                116 k

 apr-util                                                  x86_64                                             1.4.1-4.17.amzn1                                                amzn-main                                                 87 k

 apr-util-ldap                                             x86_64                                             1.4.1-4.17.amzn1                                                amzn-main                                                 17 k

 httpd-tools                                               x86_64                                             2.2.32-1.9.amzn1                                                amzn-updates                                              80 k


Transaction Summary

=============================================================================================================================================================================================================================================

Install  1 Package (+4 Dependent packages)


Total download size: 1.5 M

Installed size: 3.6 M

Is this ok [y/d/N]:



[root@ip-10-90-10-49 httpd]# rpm -qa | grep httpd

httpd-tools-2.2.32-1.9.amzn1.x86_64

httpd-2.2.32-1.9.amzn1.x86_64

[root@ip-10-90-10-49 httpd]#



[root@ip-10-90-10-49 httpd]# /etc/init.d/httpd start

Starting httpd: httpd: apr_sockaddr_info_get() failed for ip-10-90-10-49

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

                                                           [  OK  ]

[root@ip-10-90-10-49 httpd]#



[root@ip-10-90-10-49 httpd]# netstat -lpn | grep 80

tcp        0      0 :::80                       :::*                        LISTEN      22207/httpd

udp        0      0 127.0.0.1:809               0.0.0.0:*                               2328/rpc.statd

udp        0      0 fe80::1e:50ff:fe65:feba:546 :::*                                    2199/dhclient

[root@ip-10-90-10-49 httpd]#






### apache 설치


Amazon Linux


# 설치방법

yum install httpd


# 설치된 패키지

httpd-2.2.32-1.9.amzn1.x86_64


# 서비스 시작 (둘중 하나 선택)

/etc/init.d/httpd start

service httpd start




### Apache 설정파일 분석


### Section 1: Global Environment


ServerTokens OS

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#servertokens

ㄴ Client 에게 보내지는 response header field 에 보여지게되는 정보에 대한 설정 파일 입니다. | Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full 옵션이 있습니다. 



ServerRoot "/etc/httpd"

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#serverroot 

ㄴ 서버가 설치되어 있는 경로를 설정합니다. conf 및 logs 를 포함하는경우가 많습니다. Include 및 LoadModule 의 상대경로는 이 설정을 참조합니다. 

ㄴ 설치시 --prefix 로 위치를 설정할수 있습니다. 



PidFile run/httpd.pid

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html

ㄴ Process id 를 기록하는 file 위치를 설정합니다. 파일 경로가 절대경로가 아니라면 server root 를 기준으로 경로를 확인합니다. 



Timeout 60

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#timeout

ㄴ Syntax: TimeOut seconds

ㄴ 다양한 상황에서의 입출력을 대기하는 시간을 정의합니다.

ㄴ Client 에서 Data 를 읽을때 읽기 버퍼가 비어 있는경우 TCP Packet 이 도착할때까지 기다리는 시간입니다.

ㄴ Client 에서 Data 을 쓸때에 송신 버퍼가 꽉 차있는경우 Packet 확인응답을 기다리는 시간입니다.

ㄴ mod_cgi 및 mod_cgid 에서 CGI 스크립트의 개별 출력 block 를 대기하는 시간입니다.

ㄴ mod_ext_filter 에서 필터링 프로세스의 출력대기 시간입니다.

ㄴ mod_proxy 에서 ProxyTimeout 이 구성되지 않은 경우 Default 값입니다. 



KeepAlive Off

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#keepalive

ㄴ Syntax: KeepAlive On|Off

ㄴ http/1.0 keepalive 확장 기능 및 http/1.1 의 지속적 연결 기능 (persistent connection) 은 수명이 긴 http sessions 을 제공합니다. 이러한 keep-alive 를 사용하려면 해당 기능을 on 하면 됩니다. 

ㄴ http/1.0 의 연결은 client 에서 요청하게되는경우 keepalived 기능이 사용된다. keep-alive 는 내용을 미리 알고 있는경우에만 사용이 가능하며, CGI, SSL 등과 같은 동적 컨텐츠는 http/1.0 에서 keepalive 를 사용하지 않는다는것을 의미한다.

ㄴ http/1.1 에서는 지정하지 않는경우 keepalive 연결이 기본값으로 동작을 한다. client 가 길이를 알 수 없는 요청이 들어오는경우 chunked 단위 encoding 이 사용됩니다. 



MaxKeepAliveRequests 100

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#maxkeepaliverequests

ㄴ Syntax: MaxKeepAliveRequests number

ㄴ KeepAlive 가 설정된 경우 연결당 허용되는 요청수를 제한합니다. 0 으로 설정되면 무제한 요청이 허용 됩니다. 서버 성능을 최대화 하려면 해당 설정을 높은값으로 유지하면 됩니다. 



KeepAliveTimeout 15

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#keepalivetimeout

ㄴ Syntax: KeepAliveTimeout num[ms]

ㄴ http가 연결을 닫기전 후속 요청을 대기하는 시간 입니다. 기본은 초 단위로 설정이 되며 뒤에 ms 단위를 붙일경우 ms 단위로 설정이 가능합니다. (ex 1 : 1초, 200ms : 200밀리세컨) 

ㄴ KeepAliveTimeout 값이 높을수록 서버 성능에 문제가 발생할 가능성이 많으며, 서버 idle process 가 client 와의 연결을 기다리기 작업을 위해 점유 합니다. 

ㄴ domain 기반의 Virtual host 에 keepalivetimeout 이 설정되어 있지 않은경우 local ip 및 port 와 가장 일치하는 첫번째로 정의된 값이 적용 됩니다. 



========================================================

= MPM Start                                            = 

========================================================


## Server-Pool Size Regulation (MPM specific)

ㄴ https://httpd.apache.org/docs/2.4/en/mpm.html

ㄴ 사용되는 MPM 의 종류에 따라 설정되는 값에 대한 설명입니다.

ㄴ event, worker, prefork, mpmt_os2 4가지 방식이 있습니다.


# mpm 이 prefork 방식일때에 적용되는 값

<IfModule prefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers   20

ServerLimit      256

MaxClients       256

MaxRequestsPerChild  4000

</IfModule>


# mpm 이 worker 방식일때에 적용되는 값

<IfModule worker.c>

StartServers         4

MaxClients         300

MinSpareThreads     25

MaxSpareThreads     75

ThreadsPerChild     25

MaxRequestsPerChild  0

</IfModule>


StartServers

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#startservers

ㄴ Syntax: StartServers number

ㄴ Module: event, worker, prefork, mpmt_os2

ㄴ httpd 가 시작될때에 생성되는 자식 프로세스 수를 설정합니다. MPM 타입에 따라서 기본값이 전부 다릅니다. worker, event 는 2, prefork 는 5, mpmt_os2 는 2 의값을 기본값으로 가집니다.


MinSpareServers 

ㄴ https://httpd.apache.org/docs/current/mod/prefork.html#minspareservers

ㄴ Syntax: MinSpareServers number

ㄴ Module: prefork

ㄴ 요청대기를 하는 자식프로세스의 최소값을 설정합니다. 해당 값보다 유후 프로세스가 적을경우 부모프로세스는 새로운 자식 프로세스를 생성합니다.


MaxSpareServers

ㄴ https://httpd.apache.org/docs/current/mod/prefork.html#maxspareservers

ㄴ Syntax: MaxSpareServers number

ㄴ Module: prefork

ㄴ 요청 대기를 하는 자식 프로세스의 최대값을 설정합니다. 해당값 보다 유후 프로세스가 많아질경우 부모프로세스는 유후 자식 프로세스를 설정값 까지 중지 합니다. 

ㄴ MaxSpareServers 값을 MinSpareServers 와 같거나 적은값으로 설정하는경우 http 서버가 MaxSpareServers + 1 의 값으로 자동조정하게 됩니다. 


ServerLimit

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#serverlimit

ㄴ Syntax: ServerLimit number

ㄴ Module: event, worker, prefork

ㄴ prefork 의 경우 httpd 프로세스의 수명주기동안의 MaxRequestWokrers 를 설정합니다. 

ㄴ worker, event 의 경우 ServerLimit 과 ThreadLimit 을 함께 사용합니다. httpd 프로세스 수명 주기 동안의 MaxRequestWorkers 을 위한 최대값을 설정합니다. 

ㄴ ServerLimit 이 필요한것보다 과도하게 설정되어 있는경우 사용하지 않는 메모리가 추가 할당됩니다. 

ㄴ 시스템이 감당할수 있는 값보다 높은값으로 설정되는경우 httpd 가 실행되지 않거나 시스템이 불안정해 질 수 있습니다. 

ㄴ ServerLimit 은 20000 의 HardLimit 을 가지고 있습니다. 이 이상의 값을 설정하려는경우 mpm 소스파일에서 MAX_SERVER_LIMIT 값을 수정하고 rebuild 하면 됩니다. 


MaxClients (MaxRequestWorkers)

ㄴ apache 2.3.13 이하 버전까지 사용되었던 용어 이다. 2.3.13 이후에는 MaxRequestWorkers 값으로 사용된다. 2.3.13 이후버전에서도 MaxClients 값으로 설정이 가능하다. 

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers

ㄴ Syntax: MaxRequestWorkers number

ㄴ Module: event, worker, prefork

ㄴ 동시요청에 대한 제한을 설정합니다. 제한을 초과하는 연결 시도는 ListenBacklog 값까지 대기 합니다. 

ㄴ 쓰래드가 없는 방식 (fork) 인경우 기본값은 256 이며 해당값을 올리기 위해서는 ServerLimit 값을 수정해야 합니다. 

ㄴ 쓰래드 및 하이브리드 방식 (worker, event 방식)일경우 MaxRequestWorkers 는 Client 에 서비스를 제공해주는 총 쓰레드값을 제한 합니다. 기본값은 ServerLimit 에 ThreadsPerChild 값을 곱한 값입니다. 


MaxRequestsPerChild

ㄴ apache 2.3.9 이하 버전까지 사용되었던 용어 이다. 2.3.9 이후에는 maxconnectionsperchild 값으로 사용된다. 2.3.9 이후버전에서도 MaxRequestsPerChild 값으로 설정이 가능하다.

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#maxconnectionsperchild

ㄴ Syntax: MaxConnectionsPerChild number

ㄴ Module: event, worker, prefork, mpm_winnt, mpm_netware, mpmt_os2

ㄴ 각각의 하위 프로세스에서 처리 가능한 최대 연결값에 대한 제한을 설정합니다. 해당값이 0 인경우 프로세스가 expire 되지 않습니다. 


MinSpareThreads

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#minsparethreads

ㄴ Syntax: MinSpareThreads number

ㄴ Module: event, worker, mpm_netware, mpmt_os2

ㄴ 유후 쓰레드 최소 값 입니다. work 및 event 는 75을 기본값으로 사용하며 유후 쓰레드는 서버 전체에서의 유후 쓰레드를 의미합니다.

ㄴ ListenCoresBucketsRation 가 enable 이라면 precess/threads 로 추가셋이 생성될수 있습니다. 


MaxSpareThreads     

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#maxsparethreads

ㄴ Syntax: MaxSpareThreads number

ㄴ Module: event, worker, mpm_netware, mpmt_os2

ㄴ 유후 쓰레드의 최대 값 입니다. worker 및 event 는 250 을 기본값으로 사용합니다. 유후 쓰레드는 서버 전체에서의 유후 쓰레드를 의미합니다.


ThreadsPerChild 

ㄴ https://httpd.apache.org/docs/current/mod/mpm_common.html#threadsperchild

ㄴ Syntax: ThreadsPerChild number

ㄴ Module: event, worker, mpm_winnt

ㄴ 자식 프로세스에 의해 생성된 쓰레드의 갯수를 설정합니다. 프로세스가 시작될때에 쓰레드를 생성합니다. 


========================================================

= MPM End                                              = 

========================================================



Listen 80

ㄴ https://httpd.apache.org/docs/2.2/en/bind.html

ㄴ 특정 주소 및 포트에서 Listen 하는 설정 입니다. 

ㄴ 특정 포트 나 주소:포트 조합에 대해서 설정이 가능합니다. 가상호스트 기능과 결합되어 사용되기도 합니다. 

ㄴ 특정 포트만 설정되어 있는경우 모든 인터페이스의 지정된 포트를 대기합니다. IP 가 지정되면 해당 IP 에서 들어오는 요청에 대해서만 대기합니다. 

ㄴ 여러게의 Listen 을 사용할수 있습니다. 



# Dynamic Shared Object (DSO) Support


LoadModule

ㄴ https://httpd.apache.org/docs/2.4/en/mod/mod_so.html

ㄴ Syntax: LoadFile filename [filename] ...

ㄴ Module: mod_so

ㄴ apache 는 (DSO) 기술을 사용해서 서버를 다시 컴파일 하지않고 모듈을 추가할수 있다. apache 1.3, 2.0 은 지원하지 않으며, 2.0 에서 DSO 와같은 동작을 하려면 모듈을 수정해야 한다. 

ㄴ 윈도우 에서 해당 모듈은 ApacheModuleFoo.dll 이름을 사용하였지만 2.0 이후부터는 mod_so 를 사용한다. 



Include conf.d/*.conf

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#include

ㄴ Syntax: Include file-path|directory-path|wildcard

ㄴ 서버 구성내부에 다른 구성파일을 포함시키는대 사용됩니다. 지정된 경로는 절대경로이거나 ServerRoot 디렉토리에 대한 상대경로입니다.





#ExtendedStatus On

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#extendedstatus

ㄴ Syntax: ExtendedStatus On|Off

ㄴ http 요청에 대한 추적 및 상태값을 저장하는 옵션 입니다. 이 설정은 서버 전체에대한 기록이며 가상호스트단위로 분기할수 없습니다. 서버상태를 수집하게되면 서버속도가 느려질수 있습니다.


User apache

Group apache

ㄴ apache 가 실행되는 유저 및 그룹을 지정합니다. root 로 실행을 하게되면 위의 사용자및 그룹으로 실행되지 않습니다. 




### Section 2: 'Main' server configuration


ServerAdmin root@localhost

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#serveradmin

ㄴ Syntax: ServerAdmin email-address|URL

ㄴ 서버가 클라이언트에게 반환하는 오류메시지를 받을 주소를 지정합니다. http url 로 인식하지 못하는경우 mail 주소라 판단을 하며 mailto: 를 붙입니다. 관리자 메일을 등록하는것을 추천합니다. 


#ServerName www.example.com:80

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#servername

ㄴ Syntax: ServerName [scheme://]domain-name|ip-address[:port]

ㄴ 서버가 자신을 식별할때에 사용하는 이름입니다.

ㄴ DNS 로 질의되는 Server 이름이 simple.example.com 이지만 www.example.com 으로 식별을 해야하는경우 ServerName www.example.com 으로 설정을 하면 됩니다. 

ㄴ ServerName 을 지정하지 않는경우 운영체제에 호스트 이름을 요청하며 이 요청이 실패할 경우 IP 를 PTR 조회를 하여서 클라이언트가 볼 수 있는 호스트 이름을 추측하게 됩니다. 


UseCanonicalName Off

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname

ㄴ Syntax: UseCanonicalName On|Off|DNS

ㄴ 서버이름을 설정합니다. ServerName 의 값을 가지고 이름을 구성하게 됩니다. CGI 에서 SERVER_NAME 과 SERVER_PORT 값으로 사용이 됩니다. 


DocumentRoot "/var/www/html"

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#documentroot

ㄴ Syntax: DocumentRoot directory-path

ㄴ httpd 가 파일을 제공한 디렉토리를 설정 합니다. ex) DocumentRoot "/usr/web" http://my.example.com/index.html = /usr/web/index.html 을 참조하게 됩니다. 

ㄴ 절대경로로 지정하지 않을경우 ServerRoot 를 기준으로 상대경로를 계산하게 됩니다. 

ㄴ DocumentRoot 는 슬래시로 끝나서는 안됩니다. 


<Directory>

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#directory

ㄴ Syntax: <Directory directory-path> ... </Directory>

ㄴ <Directory> and </Directory> 는 지정된 디렉토리 및 디렉토리 하위의 디렉토리 및 각 디렉토리 내의 파일에 적용되는 범위를 지정합니다. 

ㄴ 지정되는 경로는 절대경로 이거나 Unix shell 스타일을 사용하는 wild-card(*) 입니다. "?" 임의의 단일 문자, "*" 임의의 문자 "[]" 문자범위도 사용가능합니다. 


Option

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#options

ㄴ Syntax: Options [+|-]option [[+|-]option] ...

ㄴ Context: server config, virtual host, directory, .htaccess

ㄴ 특정 디렉토리에서 사용할수 있는 서버 기능을 제어합니다. 

ㄴ 옵션을 None 으로 설정할수 있으며, 여러 옵션을 동시에 사용할 수 는 없습니다. 

ㄴ All, ExecCGI, FollowSymLinks, Includes, IncludesNOEXEC, Indexes, MultiViews, SymLinksIfOwnerMatch 과같은 옵션이 사용 가능합니다. 


AllowOverride

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride

ㄴ Syntax: AllowOverride All|None|directive-type [directive-type] ...

ㄴ AccessFileName 에 지정되어 있는 .htaccess 를 찾으면 해당 파일에서 선언된 지시어가 서버 설정을 대신하게 됩니다. 

ㄴ <Directory> 에서만 사용가능합니다. 정규표현식이 없지 지정된 <Directory> 에서만 유효합니다. 

ㄴ None 으로 설정하게되면 .htaccess 를 무시하게되며, All 로 설정하게되면 .htaccess 를 사용할수 있습니다. 

ㄴ AuthConfig, FileInfo, Indexes, Limit, Nonfatal=[Override|Unknown|All], Options[=Option,...] 를 사용할수 있습니다. 


Order allow,deny

Allow from all

ㄴ 서버에 접근 가능한 권한을 설정합니다. 공식문서에 관련 자료가 없어 추후 업데이트 예정입니다.



<IfModule mod_userdir.c>

    UserDir disabled

</IfModule>

ㄴ https://httpd.apache.org/docs/2.4/ko/mod/mod_userdir.html

ㄴ Syntax: UserDir directory-filename [directory-filename] ...

ㄴ http://example.com/~user/ 형식으로 접근할수 있도록 설정합니다. 



DirectoryIndex index.html index.html.var

ㄴ https://httpd.apache.org/docs/2.4/en/mod/mod_dir.html

ㄴ Syntax: DirectoryIndex disabled | local-url [local-url] ...

ㄴ client 가 디렉토리이름 끝에 / 를 지정할때에 디렉토리 을 색일할 파일목록을 설정합니다. 

ㄴ ex. example.com/[] 에 들어갈 파일목록 입니다. 


AccessFileName .htaccess

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#accessfilename

ㄴ Syntax: AccessFileName filename [filename] ...

ㄴ 문서 경로에 있는 모든 디렉토리에서 .htaccess 을 찾습니다. 

ㄴ /usr/local/web/index.html 를 반환하기전에 /.htaccess, /usr/.htaccess, /usr/local/.htaccess, /usr/local/web/.htaccess 지시문을 읽습니다. 


<Files ~ "^\.ht">

    Order allow,deny

    Deny from all

    Satisfy All

</Files>

ㄴ https://httpd.apache.org/docs/2.4/ko/mod/core.html#files

ㄴ web client 가 .htaccess 및 .htpasswd 파일을 볼수 없도록 설정되어 있습니다. 


TypesConfig /etc/mime.types

ㄴ https://httpd.apache.org/docs/current/mod/mod_mime.html#typesconfig

ㄴ Syntax: TypesConfig file-path

ㄴ Module: mod_mime

ㄴ media types 을 설정합니다. 파일경로는 ServerRoot 의 상대경로 입니다. 대부분 OS 에서 제공하는 mime.types 파일을 사용합니다.

ㄴ http://www.iana.org/assignments/media-types/index.html 게시된 IANA 등록된 공식 미디어 유형과 연결을 합니다. 


DefaultType text/plain

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#defaulttype

ㄴ Syntax: DefaultType media-type|none

ㄴ 기본으로 text/plain 을 반환합니다. apache 2.4 이상에서는 ForceType 으로 변경되었습니다.


<IfModule mod_mime_magic.c>

#   MIMEMagicFile /usr/share/magic.mime

    MIMEMagicFile conf/magic

</IfModule>

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_mime_magic.html

ㄴ MimeMagicFile 을 활성화 하고, MIMEMagicFile 경로를 지정합니다. 



HostnameLookups Off

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#hostnamelookups

ㄴ Syntax: HostnameLookups On|Off|Double

ㄴ 해당 설정을 "on" 하게되면 DNS 조회가 가능하며, "Double" 는 PTR 조회를 의미합니다. 

ㄴ 설정을 적용하게되면 Client 에서 DNS 조회에 해당되는 추가 응답시간이 발생됩니다. off 를 추천합니다. 


#EnableMMAP off

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#enablemmap

ㄴ Syntax: EnableMMAP On|Off

ㄴ 파일의 내용을 처리해야할때 httpd 가 Memory-mapping 을 사용할지를 결정합니다. 

ㄴ 성능향상을 가지고 올수 있지만 일부환경에서 운영에 문제가 발생하기에 비활성화를 추천합니다. 


#EnableSendfile off

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#enablesendfile

ㄴ Syntax: EnableSendfile On|Off

ㄴ 커널의 Sendfile 의 사용여부를 설정합니다. 

ㄴ Sendfile 은 읽기 및 보내기 작업과 버퍼할당을 회피합니다. 일부 플랫폼에나 파일시스템에서의 문제가 발생할수 있기에 기능을 비활화하는것을 추천합니다. 

ㄴ IPv6 특정 네트워크 카드에서 TCP-checksum offloading 버그가 발생됩니다. Itanium linux 에서 2GB 넘는 파일을 처리 못합니다. NFS, SMB, CIFS, FUSE 등과 같은 네트워크마운트사용시 자체케시를통해 파일을 제공못할수 있습니다. 


ErrorLog logs/error_log

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#errorlog

ㄴ Syntax: ErrorLog file-path|syslog[:facility]

ㄴ Error log 를 기록할 파일을 지정합니다. 


LogLevel warn

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#loglevel

ㄴ Syntax: LogLevel [module:]level [module:level] ...

ㄴ Error log 에 기록될 메시지 정보수준으르 설정합니


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

ㄴ Log 파일 형식을 지정합니다. 


CustomLog logs/access_log combined

ㄴ access log 파일 위치를 지정하며, 파일 형식을 설정합니다."combined"


ServerSignature On

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#ServerSignature

ㄴ ServerSignature On|Off|EMail

ㄴ server-generated documents 중에서 footer 를 구성할수 있게 합니다. 2.0.44 이후 버전에서는 ServerTokens 로 설정합니다. 



Alias /icons/ "/var/www/icons/"

ㄴ fakename realname 의 구성으로 되어 있습니다.

ㄴ Alias 의 fakename 이 "/" 로 마무리가 되면 realname 도 "/"로 마무리가 되어야하며, "/" 가 없으면 realname 도 "/" 가 없어야 합니다. 


<Directory "/var/www/icons">

    Options Indexes MultiViews FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

ㄴ /var/www/icons 디렉토리에 대한 접근관련 정책입니다. 



<IfModule mod_dav_fs.c>

    # Location of the WebDAV lock database.

    DAVLockDB /var/lib/dav/lockdb

</IfModule>

ㄴ https://httpd.apache.org/docs/2.4/ko/mod/mod_dav_fs.html

ㄴ https://httpd.apache.org/docs/2.4/ko/mod/mod_dav.html

ㄴ web_dav 를 수행하기 위한 module 에 대한 내용이다. 


ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_alias.html#scriptalias

ㄴ Syntax: ScriptAlias [URL-path] file-path|directory-path

ㄴ cgi 처리기가 처리할 cgi 스크립트가 있는 URL을 정의 합니다. 

ㄴ ex. ScriptAlias /cgi-bin/ /web/cgi-bin/ -> http://myserver/cgi-bin/foo 를 요청하면, /web/cgi-bin/foor 스크립트를 실행합니다. 


<Directory "/var/www/cgi-bin">

    AllowOverride None

    Options None

    Order allow,deny

    Allow from all

</Directory>

ㄴ cgi 디렉토리에 대한 접근 관련 정책 입니다. 


IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#indexoptions

ㄴ Syntax: IndexOptions [+|-]option [[+|-]option] ...

ㄴ Module: mod_autoindex

ㄴ 디렉토리 목록을 설정 합니다. 자세한 설정 내용은 위의 문서를 참조하시기 부탁드립니다. 


AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#addiconbyencoding

ㄴ Syntax: AddIconByEncoding icon MIME-encoding [MIME-encoding] ...

ㄴ MIME content-encoding으로 선택한 파일에 사용할 아이콘입니다. FancyIndexing 파일옆에 보여줄 아이콘을 지정합니다. 


AddIconByType (TXT,/icons/text.gif) text/*

AddIconByType (IMG,/icons/image2.gif) image/*

AddIconByType (SND,/icons/sound2.gif) audio/*

AddIconByType (VID,/icons/movie.gif) video/*

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#addiconbytype

ㄴ Syntax: AddIconByType icon MIME-type [MIME-type] ...

ㄴ MIME content-type으로 선택한 파일에 사용할 아이콘입니다. FancyIndexing 에서 MIME-type 파일 옆에 보여줄 아이콘을 지정합니다. 


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

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#addicon

ㄴ Syntax: AddIcon icon name [name] ...

ㄴ 이름으로 선택한 파일에 사용할 아이콘입니다.

ㄴ FancyIndexing 에서 name 으로 끝나는 파일옆에 보여줄 아이콘을 지정합니다. 


DefaultIcon /icons/unknown.gif

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#defaulticon

ㄴ Syntax: DefaultIcon url-path

ㄴ 특정 아이콘을 설정하지 않은 파일 옆에 나오는 아이콘입니다.


#AddDescription "GZIP compressed document" .gz

#AddDescription "tar archive" .tar

#AddDescription "GZIP compressed tar archive" .tgz

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#adddescription

ㄴ Syntax: AddDescription string file [file] ...

ㄴ FancyIndexing 에서 파일에 대한 설명을 설정 합니다. 


ReadmeName README.html

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#readmename

ㄴ Syntax: ReadmeName filename

ㄴ 파일목록 끝에 삽입할 파일의 이름을 지정합니다. 


HeaderName HEADER.html

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#headername

ㄴ Syntax: HeaderName filename

ㄴ 파일목록 위에 삽입할 파일의 이름을 지정합니다. 


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

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html#indexignore

ㄴ Syntax: IndexIgnoreReset ON|OFF

ㄴ 디렉토리를 나열할때 숨김파일을 설정합니다. 


# DefaultLanguage nl

ㄴ http://httpd.apache.org/docs/current/mod/mod_mime.html#defaultlanguage

ㄴ Syntax: DefaultLanguage language-tag

ㄴ 다른설정으로 언어 tag 가 할당되지 않는 context 의 모든 리소스에 Content-Language header field 에 보낼 기본 언어 tag 를 설정합니다. 


AddLanguage ca .ca

AddLanguage cs .cz .cs

AddLanguage da .dk

AddLanguage de .de

AddLanguage el .el

AddLanguage en .en

AddLanguage eo .eo

AddLanguage es .es

AddLanguage et .et

AddLanguage fr .fr

AddLanguage he .he

AddLanguage hr .hr

AddLanguage it .it

AddLanguage ja .ja

AddLanguage ko .ko

AddLanguage ltz .ltz

AddLanguage nl .nl

AddLanguage nn .nn

AddLanguage no .no

AddLanguage pl .po

AddLanguage pt .pt

AddLanguage pt-BR .pt-br

AddLanguage ru .ru

AddLanguage sv .sv

AddLanguage zh-CN .zh-cn

AddLanguage zh-TW .zh-tw

ㄴ http://httpd.apache.org/docs/current/mod/mod_mime.html#addlanguage

ㄴ Syntax: AddLanguage language-tag extension [extension] ...

ㄴ 지정된 파일 이름 확장명을 지정된 내용언어에 매핑시켜줍니다. RFC3066 에 정의된 언어 식별자에 해당되는 language-tag 의 HTTP Content-Language 값이 할당됩니다. 


LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_negotiation.html#languagepriority

ㄴ Syntax: LanguagePriority MIME-lang [MIME-lang] ...

ㄴ Client 가 기본 설정이 없는경우 언어변경에 우선순위를 설정합니다. 

ㄴ "LanguagePriority en fr de" 인경우 foo.html.fr foo.html.de 가 존제하지만 브라우저가 언어 기본설정이 없는경우 foo.html 에 대해서 foo.html.fr 을 반환합니다. 


ForceLanguagePriority Prefer Fallback

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_negotiation.html#forcelanguagepriority

ㄴ Syntax: ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]

ㄴ 허용되는 문서가 없는경우 수행할 작업에 대해서 설정 합니다. 

ㄴ Prefer 여러가지 선택사항이 있는경우 HTTP 코드 300(Multiple Choices) 를 반환하지 않고 하나의 유효한 결과를 제공하기 위해 LanguagePriority 를 사용합니다. 

ㄴ Fallback 는 LanguagePriority 를 사용해서 HTTP Code 406(Not Acceptable) 을 반환하지 않고 유요한 결과를 제공합니다. 사용자가 es 만 허용하였지만 해당 언어를 발견못한경우 LanguagePriority 의 첫번째를 제공합니다. 

ㄴ 두가지 옵션이 동시에 사용가능 합니다. 


AddDefaultCharset UTF-8

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset

ㄴ Syntax: AddDefaultCharset On|Off|charset

ㄴ content-ytpe 이 text/plain 이나 /text/html 일때 추가되는 언어 설정 입니다. 


#AddType application/x-tar .tgz

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_mime.html#addtype

ㄴ Syntax: AddType media-type extension [extension] ...

ㄴ 지정된 파일 확장명을  지정된 유형으로 매핑합니다. 


#AddEncoding x-compress .Z

#AddEncoding x-gzip .gz .tgz

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_mime.html#addencoding

ㄴ Syntax: AddEncoding encoding extension [extension] ...

ㄴ 지정된 파일 확장명을 지정된 인코딩 유형으로 매핑 합니다. 


AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz

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

AddType application/x-pkcs7-crl    .crl


#AddHandler cgi-script .cgi

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_mime.html#addhandler

ㄴ Syntax: AddHandler handler-name extension [extension] ...

ㄴ 지정된 파일 확장명을 지정된 handler 와 매핑 합니다. 


#AddHandler send-as-is asis


AddHandler type-map var

AddType text/html .shtml


AddOutputFilter INCLUDES .shtml

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_mime.html#addoutputfilter

ㄴ Syntax: AddOutputFilter filter[;filter...] extension [extension] ...

ㄴ 지정된 파일 확장명을 서버 응답을 처리하는 필터에 매핑 합니다. 


#ErrorDocument 500 "The server made a boo boo."

#ErrorDocument 404 /missing.html

#ErrorDocument 404 "/cgi-bin/missing_handler.pl"

#ErrorDocument 402 http://www.example.com/subscription_info.html

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#errordocument

ㄴ Syntax: ErrorDocument error-code document

ㄴ Error 발생시 각기 코드값에 마춰 Client 에게 반환할 내용을 설정합니다. 


Alias /error/ "/var/www/error/"


<IfModule mod_negotiation.c>

<IfModule mod_include.c>

    <Directory "/var/www/error">

        AllowOverride None

        Options IncludesNoExec

        AddOutputFilter Includes html

        AddHandler type-map var

        Order allow,deny

        Allow from all

        LanguagePriority en es de fr

        ForceLanguagePriority Prefer Fallback

    </Directory>


#    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var

#    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var

#    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var

#    ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var

#    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var

#    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var

#    ErrorDocument 410 /error/HTTP_GONE.html.var

#    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var

#    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var

#    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var

#    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var

#    ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var

#    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var

#    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var

#    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var

#    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var

#    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var


</IfModule>

</IfModule>


BrowserMatch "Mozilla/2" nokeepalive

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

BrowserMatch "RealPlayer 4\.0" force-response-1.0

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

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

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully

BrowserMatch "MS FrontPage" redirect-carefully

BrowserMatch "^WebDrive" redirect-carefully

BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully

BrowserMatch "^gnome-vfs/1.0" redirect-carefully

BrowserMatch "^XML Spy" redirect-carefully

BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

ㄴ https://httpd.apache.org/docs/2.4/mod/mod_setenvif.html#browsermatch

ㄴ Syntax: BrowserMatch regex [!]env-variable[=value] [[!]env-variable[=value]] ...

ㄴ http User-agent 에 따른 환경변수를 설정 합니다. 


#<Location /server-status>

#    SetHandler server-status

#    Order deny,allow

#    Deny from all

#    Allow from .example.com

#</Location>

#<Location /server-info>

#    SetHandler server-info

#    Order deny,allow

#    Deny from all

#    Allow from .example.com

#</Location>

ㄴ https://httpd.apache.org/docs/2.4/mod/core.html#location

ㄴ Syntax: <Location URL-path|URL> ... </Location>

ㄴ 등록된 URL 에 지시문을 적용합니다. 


#<IfModule mod_proxy.c>

ㄴ https://httpd.apache.org/docs/current/mod/mod_proxy.html

ㄴ http 용 proxy 및 gateway 룰 구현하여 여러가지 다양한 프로토콜 및 로드벨런싱 알고리즘을 지원합니다. 

ㄴ 3rd party 에 대한 추가 프로토콜 및 알고리즘으르 추가할수 있습니다. 

ㄴ AJP13((Apache JServe Protocol version 1.3), CONNECT (for SSL), FastCGI, ftp, HTTP/0.9, HTTP/1.0, and HTTP/1.1, SCGI, WS and WSS (Web-sockets)


#ProxyRequests On

#<Proxy *>

#    Order deny,allow

#    Deny from all

#    Allow from .example.com

#</Proxy>

ㄴ https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxy

ㄴ Syntax: <Proxy wildcard-url> ...</Proxy>

ㄴ 등록된 도메인에 대해서만 프로시서비스를 사용할수 있습니다. 


#ProxyVia On


#<IfModule mod_disk_cache.c>

#   CacheEnable disk /

#   CacheRoot "/var/cache/mod_proxy"

#</IfModule>

ㄴ https://httpd.apache.org/docs/2.2/en/mod/mod_disk_cache.html

ㄴ Disk 기반 cache 를 생성합니다. URI 기반 키를 이용해서 cache 에 저장되고 cache 에서 검색 됩니다. 


#</IfModule>

 


### Section 3: Virtual Hosts


#NameVirtualHost *:80

#

# VirtualHost example:

# Almost any Apache directive may go into a VirtualHost container.

# The first VirtualHost section is used for requests without a known

# server name.

#

#<VirtualHost *:80>

#    ServerAdmin webmaster@dummy-host.example.com

#    DocumentRoot /www/docs/dummy-host.example.com

#    ServerName dummy-host.example.com

#    ErrorLog logs/dummy-host.example.com-error_log

#    CustomLog logs/dummy-host.example.com-access_log common

#</VirtualHost>








+ Recent posts