임대일
Locky Linux: 아파치 httpd.conf 파일(feat. Apache 2.4.57) 본문
해당 글은 httpd.conf 파일 내용을 바탕으로 정리한 글입니다.
부족한 설명은 아파치 공식 홈페이지를 참고합니다.
1. ServerRoot
28 # Do not add a slash at the end of the directory path. If you point
29 # ServerRoot at a non-local disk, be sure to specify a local disk on the
30 # Mutex directive, if file-based mutexes are used. If you wish to share the
31 # same ServerRoot for multiple httpd daemons, you will need to change at
32 # least PidFile.
33 #
34 ServerRoot "/etc/httpd"
ServerRoot
지시문은 Apache 서버의 기본 경로를 지정/etc/httpd
경로는 Apache가 구성 파일, 로그 파일 등을 찾는 데 사용
2. Listen
37 # Listen: Allows you to bind Apache to specific IP addresses and/or
38 # ports, instead of the default. See also the <VirtualHost>
39 # directive.
40 #
41 # Change this to Listen on a specific IP address, but note that if
42 # httpd.service is enabled to run at boot time, the address may not be
43 # available when the service starts. See the httpd.service(8) man
44 # page for more information.
45 #
46 #Listen 12.34.56.78:80
47 Listen 80
Listen
지시문은 Apache 서버가 특정 IP 주소와 포트에서 HTTP 요청을 수신할 수 있도록 설정하는 데 사용- 기본적으로,
Listen 80
으로 Apache는 모든 IP 주소에서 80번 포트로 요청을 수신하도록 설정되어 있음 <VirtualHost>
지시문과 함께 사용될 수 있으며, 이를 통해 동일한 IP 주소와 포트에서 여러 사이트를 호스팅이 가능
46 #Listen 12.34.56.78:80
특정 IP 주소(12.34.56.78
)의 80번 포트에서 요청을 수신하도록 설정하는 Listen
지시문입니다. 주석(#
)이 있기 때문에 이 줄은 실제로는 적용되지 않으며, 주석을 제거하면 이 설정이 활성화됩니다.
서버가 부팅될 때 httpd.service
가 자동으로 시작되도록 설정되어 있다면, Apache가 해당 IP 주소에서 서비스를 시작하려고 할 때 그 IP 주소가 아직 사용 가능하지 않을 수 있다는 점을 주의해야 합니다. 이는 네트워크 인터페이스가 아직 활성화되지 않은 상태일 수 있기 때문입니다.
Apache 서버가 모든 네트워크 인터페이스의 80번 포트에서 요청을 수신하도록 설정되어 있습니다. 이 설정은 기본값으로, 서버가 어떤 IP 주소로 요청을 받든 상관없이 80번 포트로 들어오는 모든 HTTP 요청을 처리합니다.
3. DSO
50 # Dynamic Shared Object (DSO) Support
51 #
52 # To be able to use the functionality of a module which was built as a DSO you
53 # have to place corresponding `LoadModule' lines at this location so the
54 # directives contained in it are actually available _before_ they are used.
55 # Statically compiled modules (those listed by `httpd -l') do not need
56 # to be loaded here.
57 #
58 # Example:
59 # LoadModule foo_module modules/mod_foo.so
60 #
61 Include conf.modules.d/*.conf
- Dynamic Shared Object (DSO)는 Apache의 기능을 확장하기 위해 사용되는 모듈을 동적으로 로드하는 방법을 의미
LoadModule
지시문을 설정 파일에 추가하여 해당 모듈의 지시문이나 기능을 사용하기 전에 미리 로드- Apache가 서버 시작 시 이 모듈들을 로드하고, 이후에 이 모듈의 기능을 사용할 수 있도록 하기 위함
conf.modules.d/
디렉토리 내의 .conf
파일들을 포함시키기 위한 Include
지시문입니다. 이 디렉토리에는 일반적으로 여러 모듈을 로드하는 LoadModule
지시문들이 포함된 파일들이 있습니다. Include
지시문은 이 파일들을 자동으로 로드하여, 해당 디렉토리 내에 있는 모든 모듈이 Apache에 의해 로드되도록 합니다.
4. User, Group
64 # If you wish httpd to run as a different user or group, you must run
65 # httpd as root initially and it will switch.
66 #
67 # User/Group: The name (or #number) of the user/group to run httpd as.
68 # It is usually good practice to create a dedicated user and group for
69 # running httpd, as with most system services.
70 #
71 User apache
72 Group apache
User
와Group
설정은 Apache가 어떤 사용자와 그룹의 권한으로 실행될지를 지정- 대부분의 시스템 서비스와 마찬가지로, 보안을 위해 Apache 전용 사용자와 그룹을 만드는 것을 권장
- 사용자 및 그룹으로 Apache가 다른 시스템 서비스나 사용자와 격리되어 실행되며, 보안 위험을 최소화
Apache 서버(httpd
)가 특정 사용자나 그룹의 권한으로 실행되길 원할 경우, 먼저 루트(root) 사용자로 서버를 시작해야 합니다. 서버가 시작된 후, 설정된 사용자와 그룹으로 실행 권한을 변경합니다. 이 과정은 서버가 보안을 유지하면서도 필요한 권한으로 작업을 수행하도록 합니다.
5. Main
74 # 'Main' server configuration
75 #
76 # The directives in this section set up the values used by the 'main'
77 # server, which responds to any requests that aren't handled by a
78 # <VirtualHost> definition. These values also provide defaults for
79 # any <VirtualHost> containers you may define later in the file.
80 #
81 # All of these directives may appear inside <VirtualHost> containers,
82 # in which case these default settings will be overridden for the
83 # virtual host being defined.
- Main 서버 구성(Main server configuration)은 Apache 웹 서버의 기본 설정을 정의하는 섹션 소개
- 특별한 설정이 없는 모든 요청에 대해 서버가 어떻게 응답할지를 결정
- Main 서버는
<VirtualHost>
정의에 의해 처리되지 않는 모든 요청에 응답 - 특정 도메인이나 IP 주소에 대한 별도의
<VirtualHost>
설정이 없는 경우, Main 서버 구성에 따라 요청을 처리 - Main 서버 구성이라는 것은
httpd.conf
파일에서 설정된 기본 구성을 의미
6. ServerAdmin
87 # ServerAdmin: Your address, where problems with the server should be
88 # e-mailed. This address appears on some server-generated pages, such
89 # as error documents. e.g. admin@your-domain.com
90 #
91 ServerAdmin root@localhost
ServerAdmin
은 문제가 발생했을 때, 해당 문제를 이메일로 보고받을 수 있는 서버 관리자의 이메일 주소를 설정- 이 이메일 주소는 서버에서 자동으로 생성되는 페이지(예: 오류 페이지)에도 표시
- 클라이언트가 접근할 수 없는 페이지에 접속했을 때 보여지는 404 오류 페이지에서 ServerAdmin의 이메일 주소 표시
7. ServerName
94 # ServerName gives the name and port that the server uses to identify itself.
95 # This can often be determined automatically, but we recommend you specify
96 # it explicitly to prevent problems during startup.
97 #
98 # If your host doesn't have a registered DNS name, enter its IP address here.
99 #
100 #ServerName www.example.com:80
ServerName
지시문은 서버가 자신을 식별하는 데 사용하는 호스트 이름과 포트를 지정ServerName
설정은 자동으로 결정될 수 있지만, 명시적으로 지정하는 것이 좋다고 권장- 특히, 서버가 여러 네트워크 인터페이스를 가지고 있거나 가상 호스트 설정을 사용하는 경우 명시적인
ServerName
설정은 중요한 역할을 합니다. 서버에 정식으로 등록된 DNS 이름(도메인 이름)이 없는 경우,ServerName
에 IP 주소를 입력할 수 있습니다. 예를 들어, 내부 네트워크에서만 사용되는 서버라면 도메인 이름 대신 IP 주소를 사용해 서버를 식별할 수 있습니다.ServerName www.example.com:80
은 서버가www.example.com
이라는 도메인 이름과 포트 80에서 자신을 식별하도록 설정하는 것입니다.
8. <Directory />
103 # Deny access to the entirety of your server's filesystem. You must
104 # explicitly permit access to web content directories in other
105 # <Directory> blocks below.
106 #
107 <Directory />
108 AllowOverride none
109 Require all denied
110 </Directory>
- Apache의 루트 디렉토리 접근 제한 설정
<Directory />
로 지정된 루트 디렉토리는 파일 시스템의 루트 디렉토리를 의미- Apache 웹 서버를 통해 웹 브라우저 등 외부에서 접근할 때에만 적용되는 제한
- 루트 디렉토리와 그 하위 디렉토리에서는
.htaccess
파일을 통한 설정 변경이 불가능(AllowOverride None) - Apache는 루트 디렉토리와 그 하위 디렉토리에 대한 모든 웹 요청을 거부
- 웹을 통한 루트 디렉토리 내의 파일에 대한 덮어쓰기가 불가능
실제 리눅스 시스템에서는 루트 디렉토리 아래의 모든 파일과 디렉토리에 접근이 가능합니다. 다만, Apache 서버가 웹 요청을 처리할 때 루트 디렉토리와 그 하위 디렉토리에 대한 접근을 차단하도록 한 것입니다. 웹 서버를 통해 제공하고자 하는 웹 콘텐츠는 일반적으로 /var/www/html
등 특정 디렉토리에 위치합니다. 이러한 디렉토리에 대한 접근은 <Directory>
블록을 사용해 명시적으로 허용해야 합니다.
9. 명시적 허용
112 #
113 # Note that from this point forward you must specifically allow
114 # particular features to be enabled - so if something's not working as
115 # you might expect, make sure that you have specifically enabled it
116 # below.
117 #
Apache 설정 파일에서 이후에 나오는 설정들이 기본적으로 비활성화된 상태에서 시작되며, 특정 기능을 사용하려면 명시적으로 허용해야 한다는 것을 강조하고 있습니다. 기본적으로 많은 기능이 비활성화되어 있기 때문에, 필요한 기능이 있다면 이를 직접 활성화하는 설정을 추가해야 합니다. 이를 통해 서버 관리자는 서버의 보안을 강화하고, 필요한 기능만 선택적으로 활성화할 수 있습니다.
만약 서버에서 특정 기능이나 서비스가 예상대로 동작하지 않는 경우, 그 이유는 해당 기능이 명시적으로 허용되지 않았기 때문일 수 있습니다. 이럴 때는 설정 파일에서 그 기능을 활성화하도록 설정했는지 확인해야 합니다. 서버 설정 시 기본적으로 비활성화된 기능들이 많으며, 필요한 기능은 직접 활성화해야 한다는 점을 명확히 하여, 서버 설정을 보다 체계적으로 관리할 수 있도록 돕습니다.
명시적 허용이 필요한 예시 상황:
- 디렉토리 접근: 웹 콘텐츠를 제공하는 디렉토리(예: /var/www/html에 대해 접근을 허용하려면 해당 디렉토리 접근을 명시적으로 허용하는 <Directory> 블록을 추가해야 합니다.
- 모듈 사용: PHP나 SSL 같은 특정 기능을 사용하려면 해당 모듈을
LoadModule
지시문으로 명시적으로 로드해야 합니다.
10. DocumentRoot
120 # DocumentRoot: The directory out of which you will serve your
121 # documents. By default, all requests are taken from this directory, but
122 # symbolic links and aliases may be used to point to other locations.
123 #
124 DocumentRoot "/var/www/html"
DocumentRoot
지시문은 서버가 웹 콘텐츠를 제공하는 기본 디렉토리를 정의- 클라이언트가 서버에 요청을 보내면, Apache는 이 디렉토리에서 해당 요청에 맞는 파일을 찾아 응답
- 디렉토리 외부의 다른 디렉토리나 파일을 사용하려는 경우, 심볼릭 링크나 Alias 설정을 사용하여 이를 다른 위치로 연결이 가능
현재 기본 설정으로, Apache는 /var/www/html
디렉토리를 웹 서버의 루트 디렉토리로 사용합니다. 클라이언트가 http://yourdomain.com/
과 같은 요청을 보낼 때, Apache는 /var/www/html
디렉토리에서 요청된 파일을 찾습니다. 예를 들어, 클라이언트가 http://yourdomain.com/index.html
을 요청하면, Apache는 /var/www/html/index.html
파일을 찾아 응답합니다.
11. <Directory "/var/www">
127 # Relax access to content within /var/www.
128 #
129 <Directory "/var/www">
130 AllowOverride None
131 # Allow open access:
132 Require all granted
133 </Directory>
/var/www
디렉토리 내의 콘텐츠에 대한 접근을 완화(relax)하기 위한 설정/var/www
디렉토리는 웹 서버가 기본적으로 제공하는 웹 콘텐츠의 루트 디렉토리<Directory "/var/www">
블록 내의 설정은/var/www
디렉토리와 그 하위 디렉토리에도 설정이 적용/var/www
디렉토리와 그 하위 디렉토리에서는.htaccess
파일을 통한 설정 변경이 불가능(AllowOverride none)/var/www
디렉토리와 그 하위 디렉토리의 모든 콘텐츠에 대한 접근을 허용(Require all granted)
12. <Directory "/var/www/html">
# Further relax access to the default document root:
136 <Directory "/var/www/html">
137 #
138 # Possible values for the Options directive are "None", "All",
139 # or any combination of:
140 # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
141 #
142 # Note that "MultiViews" must be named *explicitly* --- "Options All"
143 # doesn't give it to you.
144 #
145 # The Options directive is both complicated and important. Please see
146 # http://httpd.apache.org/docs/2.4/mod/core.html#options
147 # for more information.
148 #
149 Options Indexes FollowSymLinks
150
151 #
152 # AllowOverride controls what directives may be placed in .htaccess files.
153 # It can be "All", "None", or any combination of the keywords:
154 # Options FileInfo AuthConfig Limit
155 #
156 AllowOverride None
157
158 #
159 # Controls who can get stuff from this server.
160 #
161 Require all granted
162 </Directory>
- Apache 웹 서버에서
/var/www/html
디렉토리(기본 웹 콘텐츠 디렉토리)에 대한 접근을 더 세부적으로 제어하는 설정 Options
지시문은 이 디렉토리에서 사용할 수 있는 기능을 정의None
: 모든 옵션 비활성화Indexes
: 요청된 디렉토리에index.html
파일이 없을 경우, 해당 디렉토리의 파일 목록을 반환FollowSymLinks
: 서버가 심볼릭 링크를 따라가도록 허용ExecCGI
: CGI 스크립트를 실행할 수 있도록 허용MultiViews
: 콘텐츠 협상(Content Negotiation)을 허용SymLinksIfOwnerMatch
: 심볼릭 링크가 원본 파일과 동일한 소유자일 때만 따라가도록 허용Includes
: 서버 측 포함(Server Side Includes, SSI)을 허용All
: 모든 옵션 활성화AllowOverride
지시문은 이 디렉토리 내에서.htaccess
파일을 통해 서버 설정을 덮어쓸 수 있는지 여부를 제어None
: 모든 옵션 비활성화Options
:.htaccess
파일에서Options
지시문을 통해 설정을 덮어쓰기 허용AuthConfig
: 인증 관련 지시문을 덮어쓰기 허용Limit
: 접근 제한 관련 지시문을 덮어쓰기 허용FileInfo
: 파일 정보 관련 지시문을 덮어쓰기 허용All
: 모든 옵션 활성화
/var/www/html
디렉토리와 그 하위 디렉토리에 대한 모든 접근을 허용(Require all granted)
13. DirectoryIndex
165 # DirectoryIndex: sets the file that Apache will serve if a directory
166 # is requested.
167 #
168 <IfModule dir_module>
169 DirectoryIndex index.html
170 </IfModule>
DirectoryIndex
는 클라이언트가 디렉토리만을 요청할 때, Apache가 그 디렉토리에서 기본적으로 제공할 파일을 지정- 예를 들어, 사용자가
http://yourdomain.com/
과 같이 디렉토리만 요청했을 때, 서버가 자동으로index.html
과 같은 파일을 응답 <IfModule dir_module>
는DirectoryIndex
지시문이dir_module
이 로드되어 있는 경우에만 적용되도록 설정dir_module
은DirectoryIndex
지시문을 처리하는 모듈.DirectoryIndex
로index.html
파일을 지정- 클라이언트가 특정 디렉토리를 요청했을 때, Apache가 해당 디렉토리에서
index.html
파일을 기본적으로 제공하도록 설정하는 것
예를 들어, 사용자가 http://yourdomain.com/
을 요청하면, Apache는 /var/www/html/index.html
파일을 찾아 응답으로 제공합니다. 만약 이 파일이 존재하지 않으면, 디렉토리의 파일 목록이 표시되거나(옵션이 허용된 경우) 오류가 발생할 수 있습니다.
14. <Files ".ht*">
173 # The following lines prevent .htaccess and .htpasswd files from being
174 # viewed by Web clients.
175 #
176 <Files ".ht*">
177 Require all denied
178 </Files>
.htaccess
및.htpasswd
파일에 대한 웹 클라이언트의 접근을 차단하는 설정- 파일 이름이
.ht
로 시작하는 모든 파일(*
)에 대해 특정 규칙을 적용 .htaccess
및.htpasswd
파일에 대한 모든 접근을 차단하는 설정(Require all denied)
.htaccess
와 .htpasswd
파일이 웹 브라우저를 통해 외부에서 접근되지 않도록 하여, 서버의 중요한 설정 파일들이 노출되는 것을 방지합니다. .htaccess
파일은 특정 디렉토리에 대한 Apache 서버의 설정을 정의할 수 있는 파일로, 보안 설정이나 URL 재작성, 접근 제어 등을 담고 있습니다. 이 파일이 노출되면 서버의 보안이 위협받을 수 있습니다. .htpasswd
파일은 사용자 인증을 위한 사용자 이름과 암호를 저장하는 파일입니다. 이 파일이 노출되면 서버의 사용자 계정 정보가 위험에 처할 수 있습니다.
15. ErrorLog
181 # ErrorLog: The location of the error log file.
182 # If you do not specify an ErrorLog directive within a <VirtualHost>
183 # container, error messages relating to that virtual host will be
184 # logged here. If you *do* define an error logfile for a <VirtualHost>
185 # container, that host's errors will be logged there and not here.
186 #
187 ErrorLog "logs/error_log"
ErrorLog
는 서버에서 발생하는 오류를 기록할 로그 파일의 위치를 지정하는 데 사용- 기본 로그 디렉토리(
logs/
) 내의error_log
파일에 기록
16. LogLevel
190 # LogLevel: Control the number of messages logged to the error_log.
191 # Possible values include: debug, info, notice, warn, error, crit,
192 # alert, emerg.
193 #
194 LogLevel warn
LogLevel
은 서버의 오류 로그 파일에 기록되는 메시지의 양과 세부 사항을 제어debug
: 가장 낮은 수준의 로그 레벨로, 모든 디버깅 정보까지 기록. 매우 상세한 로그가 필요할 때 사용notice
: 일반적으로 관심을 가질 만한 메시지를 기록error
: 오류 메시지를 기록. 운영에 영향을 미치는 문제를 포함alert
: 매우 중요한 문제를 기록. 즉각적인 조치가 필요emerg
: 가장 높은 수준의 로그 레벨. 시스템이 사용 불가능할 정도로 심각한 문제를 기록crit
: 심각한 문제를 기록. 즉각적인 주의가 필요한 문제warn
: 경고성 메시지를 기록. 심각하지 않은 문제나 주의할 사항을 포함info
: 정보성 메시지를 기록
17. <IfModule log_config_module>
196 <IfModule log_config_module>
197 #
198 # The following directives define some format nicknames for use with
199 # a CustomLog directive (see below).
200 #
201 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
202 LogFormat "%h %l %u %t \"%r\" %>s %b" common
203
204 <IfModule logio_module>
205 # You need to enable mod_logio.c to use %I and %O
206 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
207 </IfModule>
208
209 #
210 # The location and format of the access logfile (Common Logfile Format).
211 # If you do not define any access logfiles within a <VirtualHost>
212 # container, they will be logged here. Contrariwise, if you *do*
213 # define per-<VirtualHost> access logfiles, transactions will be
214 # logged therein and *not* in this file.
215 #
216 #CustomLog "logs/access_log" common
217
218 #
219 # If you prefer a logfile with access, agent, and referer information
220 # (Combined Logfile Format) you can use the following directive.
221 #
222 CustomLog "logs/access_log" combined
223 </IfModule>
log_config_module
은 Apache에서 로그 형식을 정의하고, 로그 파일에 기록하는 기능을 제공하는 모듈LogFormat
지시문은 로그 파일에 기록될 각 요청의 형식을 정의- 각각의
LogFormat
은 특정 형식에 대한 닉네임을 지정하며, 이 닉네임을 사용하여CustomLog
지시문에서 로그 형식을 참조가 가능
- combined:
%h
: 클라이언트의 IP 주소%l
: 클라이언트의 확인되지 않은 ID (일반적으로 하이픈-
)%u
: 클라이언트의 사용자 이름 (HTTP 인증 사용 시)%t
: 요청 시간을 로그의 형식으로 기록\"%r\"
: 요청 라인 (예:GET /index.html HTTP/1.1
)%>s
: 서버의 응답 상태 코드 (예: 200, 404)%b
: 응답의 크기 (바이트 단위, 헤더 제외)\"%{Referer}i\"
: 요청의 Referer 헤더 (이전 페이지의 URL)\"%{User-Agent}i\"
: 요청의 User-Agent 헤더 (브라우저 정보)
common
:combined
형식에서Referer
와User-Agent
정보를 제외한 일반적인 로그 형식입니다.
17.1 <IfModule logio_module>
204 <IfModule logio_module>
205 # You need to enable mod_logio.c to use %I and %O
206 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
207 </IfModule>
logio_module
은 추가적으로 로그에 전송된 바이트 수(%I
와%O
)를 기록combinedio
:combined
형식에 더해, 추가적으로%I
와%O
를 포함한 로그 형식입니다.%I
: 요청의 바이트 수 (클라이언트로부터 수신된 바이트 수)%O
: 응답의 바이트 수 (클라이언트로 전송된 바이트 수)
17.2 CustomLog "logs/access_log" combined
222 CustomLog "logs/access_log" combined
- 액세스 로그 파일의 위치를 지정하고, 로그 형식으로
combined
형식을 사용하도록 설정"logs/access_log"
: 액세스 로그 파일의 경로combined
: 앞서 정의된LogFormat
닉네임을 사용하여, 더 많은 정보를 포함한 로그 형식을 지정
18. <IfModule alias_module>
225 <IfModule alias_module>
226 #
227 # Redirect: Allows you to tell clients about documents that used to
228 # exist in your server's namespace, but do not anymore. The client
229 # will make a new request for the document at its new location.
230 # Example:
231 # Redirect permanent /foo http://www.example.com/bar
232
233 #
234 # Alias: Maps web paths into filesystem paths and is used to
235 # access content that does not live under the DocumentRoot.
236 # Example:
237 # Alias /webpath /full/filesystem/path
238 #
239 # If you include a trailing / on /webpath then the server will
240 # require it to be present in the URL. You will also likely
241 # need to provide a <Directory> section to allow access to
242 # the filesystem path.
243
244 #
245 # ScriptAlias: This controls which directories contain server scripts.
246 # ScriptAliases are essentially the same as Aliases, except that
247 # documents in the target directory are treated as applications and
248 # run by the server when requested rather than as documents sent to the
249 # client. The same rules about trailing "/" apply to ScriptAlias
250 # directives as to Alias.
251 #
252 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
253
254 </IfModule>
alias_module
은 Apache가 경로를 매핑하거나 리다이렉션을 처리하는 기능을 제공하는 모듈Redirect
지시문은 특정 경로에 대한 요청을 다른 위치로 리다이렉트(재전송)하는 방법을 제공Alias
지시문은 웹 경로를 서버의 파일 시스템 경로로 매핑하는 방법을 제공ScriptAlias
지시문은 스크립트 파일을 실행할 디렉토리를 지정하는 설정
18.1 Redirect 예제
230 # Example:
231 # Redirect permanent /foo http://www.example.com/bar
/foo
경로로 들어오는 요청을 http://www.example.com/bar
로 영구적으로(permanent
) 리다이렉트하는 설정입니다. "permanent"는 HTTP 상태 코드 301을 사용하여 영구적인 리다이렉션을 의미합니다.
18.2 Alias 예제
237 # Example:
238 # Alias /webpath /full/filesystem/path
Alias
지시문은 웹 경로를 서버의 파일 시스템 경로로 매핑하는 방법을 제공합니다. 이 지시문을 사용하면 DocumentRoot
(예: /var/www/html
) 외부에 있는 파일이나 디렉토리를 특정 웹 경로를 통해 접근할 수 있게 됩니다.
/webpath
라는 URL 경로를 서버의 /full/filesystem/path
라는 실제 파일 시스템 경로로 매핑하는 설정입니다. 클라이언트가 http://yourdomain.com/webpath
를 요청하면, Apache는 /full/filesystem/path
디렉토리에서 파일을 찾아 응답합니다.
239 # If you include a trailing / on /webpath then the server will
240 # require it to be present in the URL. You will also likely
241 # need to provide a <Directory> section to allow access to
242 # the filesystem path.
만약 Alias 경로의 끝에 슬래시(/
)를 포함하면, 클라이언트가 요청할 때 이 슬래시가 반드시 포함되어야 한다는 설명입니다. 또한, 이러한 경우 파일 시스템 경로에 대한 접근을 허용하기 위해 <Directory>
블록을 추가로 설정해야 할 수도 있습니다.
18.3 ScriptAlias 설명
250 # The same rules about trailing "/" apply to ScriptAlias
251 # directives as to Alias.
ScriptAlias
지시문은 스크립트 파일을 실행할 디렉토리를 지정하는 설정- 일반적인
Alias
와 비슷하지만,ScriptAlias
로 지정된 디렉토리 내의 파일들은 정적 콘텐츠가 아니라 서버에서 실행되는 스크립트로 처리(예를 들어, CGI 스크립트가 이러한 방식으로 처리됩니다.) ScriptAlias
지시문에서도 경로 끝에 슬래시(/
)를 포함할 때의 규칙은Alias
와 동일하다는 설명- 슬래시를 포함한 경로는 클라이언트 요청에서도 동일하게 슬래시가 포함이 필수
252 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
/cgi-bin/
경로로 들어오는 요청을 서버의 /var/www/cgi-bin/
디렉토리로 매핑하는 설정입니다. 이 디렉토리에 있는 파일들은 서버에서 실행되는 CGI 스크립트로 처리됩니다.
19. <Directory "/var/www/cgi-bin">
257 # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
258 # CGI directory exists, if you have that configured.
259 #
260 <Directory "/var/www/cgi-bin">
261 AllowOverride None
262 Options None
263 Require all granted
264 </Directory>
/var/www/cgi-bin
디렉토리에 대한 접근 권한을 정의/var/www/cgi-bin
디렉토리와 그 하위 디렉토리에서는.htaccess
파일을 통한 설정 변경이 불가능(AllowOverride None)/var/www/cgi-bin
디렉토리에서 가능한 모든 옵션을 비활성화(Options None
)/var/www/cgi-bin
디렉토리에 대한 모든 접근을 허용
보안적으로 CGI 스크립트 디렉토리에서는 .htaccess
파일을 통한 설정 변경이 허용되지 않도록 하는 것이 일반적입니다.(AllowOverride None) 이를 통해 의도하지 않은 설정 변경이나 보안 위험을 방지할 수 있습니다.
Options None
은 이 디렉토리에서 가능한 모든 옵션을 비활성화함으로써, 보안을 강화하고, 이 디렉토리 내에서 예상치 못한 기능이 활성화되지 않도록 방지합니다.
Require all granted
은 CGI 스크립트 디렉토리 내의 스크립트가 정상적으로 실행되기 위해, 이 설정은 필수적입니다. 하지만 이 설정을 사용할 때는 보안 측면을 고려해야 합니다. 특히, 해당 디렉토리 내의 파일들이 적절하게 보호되고, 의도치 않은 접근으로부터 안전한지 확인해야 합니다.
20. <IfModule mime_module>
<IfModule mime_module>
267 #
268 # TypesConfig points to the file containing the list of mappings from
269 # filename extension to MIME-type.
270 #
271 TypesConfig /etc/mime.types
272
273 #
274 # AddType allows you to add to or override the MIME configuration
275 # file specified in TypesConfig for specific file types.
276 #
277 #AddType application/x-gzip .tgz
278 #
279 # AddEncoding allows you to have certain browsers uncompress
280 # information on the fly. Note: Not all browsers support this.
281 #
282 #AddEncoding x-compress .Z
283 #AddEncoding x-gzip .gz .tgz
284 #
285 # If the AddEncoding directives above are commented-out, then you
286 # probably should define those extensions to indicate media types:
287 #
288 AddType application/x-compress .Z
289 AddType application/x-gzip .gz .tgz
290
291 #
292 # AddHandler allows you to map certain file extensions to "handlers":
293 # actions unrelated to filetype. These can be either built into the server
294 # or added with the Action directive (see below)
295 #
296 # To use CGI scripts outside of ScriptAliased directories:
297 # (You will also need to add "ExecCGI" to the "Options" directive.)
298 #
299 #AddHandler cgi-script .cgi
300
301 # For type maps (negotiated resources):
302 #AddHandler type-map var
303
304 #
305 # Filters allow you to process content before it is sent to the client.
306 #
307 # To parse .shtml files for server-side includes (SSI):
308 # (You will also need to add "Includes" to the "Options" directive.)
309 #
310 AddType text/html .shtml
311 AddOutputFilter INCLUDES .shtml
312 </IfModule>
서버가 특정 파일 확장자를 어떻게 처리할지, MIME 타입을 어떻게 정의할지, 그리고 파일을 처리하기 위한 특정 핸들러나 필터를 어떻게 설정할지를 결정합니다. 이러한 설정은 서버가 다양한 파일 형식을 올바르게 인식하고 처리할 수 있도록 돕습니다.
20.1 TypesConfig
271 TypesConfig /etc/mime.types
TypesConfig
지시문은 Apache가 MIME 타입 정보를 읽어올 파일의 경로를 지정/etc/mime.types
파일에는 파일 확장자와 그에 해당하는 MIME 타입이 정의되어 있음TypesConfig
지시문이 파일 확장자와 MIME 타입 간의 매핑 정보를 포함하는 파일을 지정하는 역할을 한다고 설명- 이 파일에는 서버가 다양한 파일 형식을 올바르게 인식할 수 있도록 도와주는 매핑 정보가 포함되어 있음
20.2 AddType
277 #AddType application/x-gzip .tgz
.tgz
확장자를application/x-gzip
MIME 타입으로 설정하는AddType
지시문- 주석 처리되어 있으므로, 이 설정은 현재 적용되지 않음
AddType
지시문은TypesConfig
파일에 정의된 MIME 타입을 추가하거나 덮어쓸 수 있게 해준다고 설명- 이를 통해 서버 관리자는 특정 파일 확장자에 대해 원하는 MIME 타입을 지정
288 AddType application/x-compress .Z
289 AddType application/x-gzip .gz .tgz
.Z
확장자를application/x-compress
MIME 타입으로,.gz
와.tgz
확장자를application/x-gzip
MIME 타입으로 설정- 서버가 해당 확장자를 가진 파일을 올바르게 처리할 수 있도록 도와줌
20.3 AddEncoding
282 #AddEncoding x-compress .Z
283 #AddEncoding x-gzip .gz .tgz
.Z
확장자를x-compress
인코딩으로,.gz
와.tgz
확장자를x-gzip
인코딩으로 설정하는AddEncoding
지시문- 주석 처리되어 있으므로, 현재는 적용되지 않음
AddEncoding
은 특정 파일 확장자에 대해 인코딩 정보를 추가하여, 브라우저가 파일을 실시간으로 압축 해제할 수 있도록 설정- 모든 브라우저가 이 기능을 지원하는 것은 아니므로 주의가 필요
AddEncoding
지시문이 주석 처리된 경우, 해당 확장자를 위한 MIME 타입을 정의해야 할 수도 있음
20.4 AddHandler
296 # To use CGI scripts outside of ScriptAliased directories:
297 # (You will also need to add "ExecCGI" to the "Options" directive.)
298 #
299 #AddHandler cgi-script .cgi
AddHandler
지시문이 특정 파일 확장자를 핸들러에 매핑할 수 있음- 핸들러는 파일 타입과 관련이 없는 작업을 수행하는 데 사용
- 핸들러는 서버에 내장되어 있거나,
Action
지시문을 통해 추가될 수 있음 .cgi
확장자를cgi-script
핸들러에 매핑하여,ScriptAlias
디렉토리 외부에서도 CGI 스크립트를 사용할 수 있도록 설정하는AddHandler
지시문으로, 해당 설정을 적용하기 위해서는 해당 디렉토리의Options
지시문에ExecCGI
옵션을 추가해야 한다.- 주석 처리되어 있으므로, 현재는 적용되지 않음
301 # For type maps (negotiated resources):
302 #AddHandler type-map var
.var
확장자를type-map
핸들러에 매핑하여, 타입 맵(협상된 리소스)을 사용할 수 있도록 설정하는AddHandler
지시문- 주석 처리되어 있으므로, 현재는 적용되지 않음
20.5 Filters
305 # Filters allow you to process content before it is sent to the client.
- 필터를 사용하여, 클라이언트에게 콘텐츠가 전송되기 전에 해당 콘텐츠를 처리할 수 있다는 것을 설명
- 필터는 콘텐츠를 변환하거나 수정하는 데 사용
20.6 SSI(서버 측 포함) 설정
307 # To parse .shtml files for server-side includes (SSI):
308 # (You will also need to add "Includes" to the "Options" directive.)
.shtml
파일에 대해 서버 측 포함(SSI)을 활성화하기 위해 필요한 설정을 설명Options
지시문에Includes
옵션을 추가해야 함
310 AddType text/html .shtml
311 AddOutputFilter INCLUDES .shtml
.shtml
확장자를text/html
MIME 타입으로 설정하고, 이 파일들에 대해INCLUDES
필터를 적용하여 서버 측 포함(SSI)을 활성화- 해당 설정을 통해
.shtml
파일이 HTML 문서로 처리되며, 서버 측에서 포함된 지시문들이 처리됨
21. 사용자 정의 오류 응답
333 # Customizable error responses come in three flavors:
334 # 1) plain text 2) local redirects 3) external redirects
335 #
336 # Some examples:
337 #ErrorDocument 500 "The server made a boo boo."
338 #ErrorDocument 404 /missing.html
339 #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
340 #ErrorDocument 402 http://www.example.com/subscription_info.html
- Apache는 특정 HTTP 오류가 발생했을 때 기본 오류 페이지를 제공
ErrorDocument
지시문을 사용하여 사용자 정의 오류 메시지를 제공하거나, 특정 페이지로 리다이렉트가 가능- 사용자 정의 오류 응답은 아래의 세 가지 형태로 제공
- plain text: 단순 텍스트 메시지를 클라이언트에게 반환
- local redirects: 서버 내의 다른 페이지로 클라이언트를 리다이렉트
- external redirects: 외부 URL로 클라이언트를 리다이렉트
21.1 HTTP 500 내부 서버 에러 예제
337 #ErrorDocument 500 "The server made a boo boo."
- HTTP 500 내부 서버 오류가 발생했을 때, "The server made a boo boo."라는 단순 텍스트 메시지를 클라이언트에게 반환하는 설정
21.2 로컬 디라이렉트 예제
338 #ErrorDocument 404 /missing.html
- HTTP 404 Not Found 오류가 발생했을 때, 클라이언트를
/missing.html
페이지로 리다이렉트하는 설정 - DocumentRoot 디렉토리 내에 위치한
missing.html
파일로 클라이언트를 안내
21.3 CGI 스크립트로의 리다이렉트 예제
339 #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
- HTTP 404 Not Found 오류가 발생했을 때, 클라이언트를
/cgi-bin/missing_handler.pl
CGI 스크립트로 리다이렉트하는 설정 - 서버는 스크립트를 실행하여 동적으로 오류 메시지를 생성하거나 추가 처리가 가능
22. EnableMMAP, EnableSendfile
344 # EnableMMAP and EnableSendfile: On systems that support it,
345 # memory-mapping or the sendfile syscall may be used to deliver
346 # files. This usually improves server performance, but must
347 # be turned off when serving from networked-mounted
348 # filesystems or if support for these functions is otherwise
349 # broken on your system.
350 # Defaults if commented: EnableMMAP On, EnableSendfile Off
351 #
352 #EnableMMAP off
353 EnableSendfile on
- 파일 전송 최적화와 추가 구성 파일에 대한 설정. 주로 서버의 성능을 향상시키기 위한 설정
EnableMMAP
: 기본값은On
으로, 메모리 매핑을 사용하도록 설정EnableSendfile
: 기본값은Off
로,sendfile
시스템 호출을 사용하지 않도록 설정
23. IncludeOptional
355 # Supplemental configuration
356 #
357 # Load config files in the "/etc/httpd/conf.d" directory, if any.
358 IncludeOptional conf.d/*.conf
/etc/httpd/conf.d
디렉토리에 있는 구성 파일들을 불러오도록 설정IncludeOptional
지시문은 해당 디렉토리에 파일이 있는 경우에만 불러오며, 파일이 없으면 무시- 서버의 메인 구성 파일 외에도 추가적으로 설정을 확장하거나 수정할 수 있는 유연성을 제공