임대일

Locky Linux: 아파치 httpd.conf 파일(feat. Apache 2.4.57) 본문

리눅스/Locky

Locky Linux: 아파치 httpd.conf 파일(feat. Apache 2.4.57)

limdae94 2024. 8. 25. 21:33
 

core - Apache HTTP Server Version 2.4

This directive enables operating system specific optimizations for a listening socket by the Protocol type. The basic premise is for the kernel to not send a socket to the server process until either data is received or an entire HTTP Request is buffered.

httpd.apache.org

 

해당 글은 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
  • UserGroup 설정은 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_moduleDirectoryIndex 지시문을 처리하는 모듈. DirectoryIndexindex.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 형식에서 RefererUser-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 지시문을 사용하여 사용자 정의 오류 메시지를 제공하거나, 특정 페이지로 리다이렉트가 가능
  • 사용자 정의 오류 응답은 아래의 세 가지 형태로 제공
    1. plain text: 단순 텍스트 메시지를 클라이언트에게 반환
    2. local redirects: 서버 내의 다른 페이지로 클라이언트를 리다이렉트
    3. 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 지시문은 해당 디렉토리에 파일이 있는 경우에만 불러오며, 파일이 없으면 무시
  • 서버의 메인 구성 파일 외에도 추가적으로 설정을 확장하거나 수정할 수 있는 유연성을 제공