서버 운영/APM 서버 구축

[Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

씨실과 날실 2020. 10. 9. 09:00

 

[관련 게시물]

Ubuntu 20.04 LTS에서 APM 설치

2020/09/14 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 아파치(Apache2 설치

2020/09/16 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.3 설치

2020/09/18 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - 마리아DB(MariaDB) 10.5 설치

2020/09/20 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - PHP 7.4 설치

2020/09/22 - [서버 운영/APM 서버 구축] - 우분투(Ubuntu) 20.04에서 APM 설치 - APM 설치 후 방화벽 설정

2020/09/24 - [서버 운영/APM 서버 구축] - MariaDB 10.4 이후의 계정 인증 관련 변화(unix_socket, mysql_native_password 인증 / 계정, 암호 및 전역 권한 정보 저장 테이블 변경 등)

2020/09/26 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - apache2.conf 기본 설정

2020/09/28 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 기본 환경 파일 설정 - php.ini 기본 설정

 

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 원문

2020/09/30 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 목록

2020/10/05 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - Apache2

2020/10/07 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - PHP 7.4 - php.ini

Ubuntu 20.04에서 설치한 Apache2 서버 주요 설정 파일 내 지시어 설명

2020/10/09 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] apache2.conf의 기본값에 사용된 지시어 설명

2020/10/11 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] ports.conf 의 기본값에 사용된 지시어 설명

2020/10/13 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] envvars의 기본값에 사용된 지시어 설명

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

2020/10/17 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 000-default.conf의 기본값에 사용된 지시어 설명

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명


Ubuntu 20.04에서 phpMyAdmin 설치 및 설정

2021.02.20 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 01 - 저장소 설치

2021.03.15 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 02 - Apache 서버 관리자를 위한수동 설치(버전 5.1.0 기준)

2021.03.17 - [서버 운영/APM 서버 구축] - 우분투 20.04에서 phpMyAdmin 설치 03 - 보안강화 작업

2021.03.19 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 04 - 웹호스팅 사용자를 위한 수동 설치(버전 5.1.0 기준)

2021.03.21 - [서버 운영/APM 서버 구축] - phpMyAdmin 설치 05 - setup 페이지를 통한 구성 파일 생성

Ubuntu 18.04 LTS에서 APM 설치

2018/11/09 - [서버 운영/APM 서버 구축] - Apache 서버 설치

2018/11/14 - [서버 운영/APM 서버 구축] - MariaDB 설치

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 1

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 2 - ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded

2018/11/16 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 3

2018/11/19 - [서버 운영/APM 서버 구축] - PHP7 설치

2018/11/21 - [서버 운영/APM 서버 구축] - 서버 환경 파일 수정 - php.ini, apache2.conf

 

Ubuntu 18.04 LTS에서 MariaDB 백업 및 업그레이드

2019/01/15 - [서버 운영/APM 서버 구축] - MariaDB & MySQL 백업과 복원 - Nextcloud 14

2019/06/27 - [서버 운영/APM 서버 구축] - MariaDB 업그레이드 (Upgrading from MariaDB 10.3 to MariaDB 10.4)

 

Ubuntu 18.04 LTS에서 PHP 버전 전환

2019/07/05 - [서버 운영/APM 서버 구축] - Apache와 Shell에서 PHP 버전 전환하기(How to Switch between Multiple PHP Version)

 

Ubuntu 18.04 LTS에서 phpmyadmin 설치 및 운용

2018/11/23 - [서버 운영/APM 서버 구축] - phpmyadmin 설치 - APT 패키지 관리자를 통한 설치

2019/06/18 - [서버 운영/APM 서버 구축] - APT 패키지 관리자를 통해 설치한 phpMyAdmin 업그레이드 방법(업그레이드 버전 4.9.0.1)

2019/07/01 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 01 - 일반 설치

2019/07/03 - [서버 운영/APM 서버 구축] - phpMyAdmin 수동 설치 02 - 심볼릭 링크를 이용한 보안 접속

2019/06/16 - [서버 운영/APM 서버 구축] - phpMyAdmin 4.6.6deb5와 PHP 7.2 간 호환성 문제 해결 - Warning in ./libraries/sql.lib.php#613

 

XAMPP 설치 및 운용

2019/04/20 - [서버 운영/서버 구축 꾸러미] - XAMPP에 대하여(버전 7.1.28 / 7.2.17 / 7.3.4)

2019/04/22 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 7.3.4 인스톨러 설치

2019/04/25 - [서버 운영/서버 구축 꾸러미] - XAMPP for Windows 설정

2019/06/03 - [서버 운영/서버 구축 꾸러미] - XAMPP 포터블(portable) 사용법

2019/06/05 - [서버 운영/서버 구축 꾸러미] - XAMPP for Linux 4.3.5 설치 및 사용법

 

서버 운영을 위한 관련 연재글

2018/11/07 - [리눅스/Ubuntu] - 방화벽 설정 - ufw

2018/11/12 - [서버 운영/버추얼박스(VirtualBox)] - 가상머신(Virtualbox) 내 서버 외부접속

2019/01/05 - [미디어위키/미디어위키 설치 및 관리] - 호스트 컴퓨터에서 가상머신 내 미디어위키 접속 및 작업을 위한 버추얼박스 포트포워딩 설정

2019/03/15 - [서버 운영/APM 서버 구축] - PHP 7.3으로의 업그레이드 및 사용 연기 권장 안내 - PHP Notice: compact(): Undefined variable:

 

 

Apache 2 환경 설정 디렉터리 및 파일에 대한 개관

Apache2의 구성 파일은 /etc/apache2/ 디렉터리에 다음과 같이 계층화하여 분류되어 있습니다.

#
#    /etc/apache2/
#    |-- apache2.conf
#    |    `--  ports.conf
#    |-- mods-enabled
#    |    |-- *.load
#    |    `-- *.conf
#    |-- conf-enabled
#    |    `-- *.conf
#     `-- sites-enabled
#         `-- *.conf
#

 

apache2.conf

apache2.conf는 기본 구성 파일입니다. 웹 서버를 시작할 때 이 파일을 포함하여 나머지 모든 구성 파일을 모두 모아 읽어들인 다음 구동합니다.
 

ports.conf

ports.conf는 항상 기본 구성 파일에 포함됩니다. 이 파일에서 요청되는 연결을 위한 수신 포트를 설정합니다.

 

mods-enabled/, conf-enabled/ 및 sites-enabled/

mods-enabled/, conf-enabled/ 및 sites-enabled/ 디렉터리의 구성 파일에는 각각 모듈, 전역 구성 조각 파일 또는 가상 호스트 구성을 관리하는 특정 구성 조각 파일이 포함되어 있습니다.

각 *-available/ 디렉터리에 있는 사용 가능한 구성 파일에 대응되는 심볼릭링크 파일을 구성하여 활성화할 수 있습니다.

모듈 활성화/비활성화 명령 : a2enmod/a2dismod

가상 호스트 사이트 활성화/비활성화 명령 : a2ensite/a2dissite

환경 구성 활성화/비활성화 :  a2enconf/a2disconf

위 명령을 사용하여 관리할 수 있습니다.

 

Apache 서버 구동/ 중지

/etc/init.d/apache2 또는 apache2ctl로 아파치 서버를 시작/중지할 수 있습니다.

/usr/bin/apache2를 직접 호출하는 것은 기본 구성에서 작동하지 않습니다.

 

 


 

 

 

 

 

apache2.conf  파일에 대한 개략적인 설명

apache2.conf  파일은 Apache 서버의 핵심 구성 파일입니다. 해당 파일의 원문에는 서버를 구성할 때 필요한 각 설정에 대한 지시안내문이 포함되어 있습니다.

http://httpd.apache.org/docs/2.4/

각 지시문에 대한 자세한 정보는 위 링크를 참조하고 서버의 OS가 데비안 계열인 경우 특정 힌트에 대해서는 /usr/share/doc/apache2/README.Debian을 참조하시기 바랍니다.

데비안 계열 OS에서 Apache2를 설치한 경우, Apache 2 구성이 업스트림에서 제공하는 것과는 다릅니다. 이는 데비안의 기본 Apache2 설치가 변경 사항을 자동화하고 서버를 가능한 한 쉽게 관리하기 위해 모듈, 가상 호스트 및 추가 구성 지시문을 가능한 한 유연하게 추가, 제거, 수정하기 때문입니다.

 

apache2.conf 원문

2020/09/30 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 목록

2020/10/05 - [서버 운영/APM 서버 구축] - 우분투 20.04 APM 서버 주요 환경 파일 원문 - Apache2

apache2.conf 원문은 위 링크를 참고하시기 바랍니다.

 

지시어 사용 안내 설명 주석 제거 후 원문

# Global configuration


#ServerRoot "/etc/apache2"


#Mutex file:$ default


DefaultRuntimeDir $


PidFile $


Timeout 300


KeepAlive On


MaxKeepAliveRequests 100


KeepAliveTimeout 5


User $
Group $


HostnameLookups Off


ErrorLog $/error.log


LogLevel warn


IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf


Include ports.conf


<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>


<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>


<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>


#<Directory /srv/>
#    Options Indexes FollowSymLinks
#    AllowOverride None
#    Require all granted
#</Directory>


AccessFileName .htaccess


<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>


LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%i\" \"%i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%i\" \"%i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%i -> %U" referer
LogFormat "%i" agent


IncludeOptional conf-enabled/*.conf


IncludeOptional sites-enabled/*.conf


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

 

이하의 내용은 설정 지시어에 대한 간략한 설명입니다. 보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/directives.html

 


 

 

주요 지시어 설명 - 전역 설정

 

directive(=지시어, 지시문)

Apache2 서버는 환경 설정 파일을 구성할 때 모듈이 지원하는 특정 기능을 제어하기 위해서는 이른바 directive를 각 줄의 앞에 제시하고 각 directive별 구문을 올바르게 작성해야합니다.

이 글을 포함하여 수 회에 걸쳐 Apache 2 서버의 주요 directive에 대해 글을 올리게 되었습니다. 이 directive를 지시어, 지시문 등으로 번역할 수 있는데 제 연재에서는 이후부터 '지시어'라 적도록 하겠습니다.

https://httpd.apache.org/docs/2.4/mod/directives.html

이 지시어들에 대한 설명은 위 링크 문서에 연결된 모듈별 문서 내 개별 지시어 파트 내용을 번역하고 서버 구축 초심자에게 어렵다고 느껴지는 부분은 보다 자세한 내용을 덧붙여 최대한 쉽게 이해할 수 있도록 작성하였습니다.

잘못된 부분이 있는 경우 댓글을 남겨주시면 확인 후 반영하도록 하겠습니다.

 

모듈과 지시어의 관계

지시어가 정상적으로 작동하기 위해서는 해당 지시어를 지원하는 모듈이 활성화되어 있어야 합니다. 일부 모듈은 자동으로 활성되어 있지 않으므로 a2mod 명령 등으로 사용자가 직접 활성화해주어야 합니다.

 

기본값

아래 하늘색의 지시어 기본 정보 상자 내 기본값은 Apache HTTP Server Project 팀이 공식 사이트에서 배포하는 소스 파일을 특별한 수정 없이 그대로 컴파일하여 설치할 때 적용되는 값입니다.

그러나 리눅스 배포판별로 각 배포판이 제공하는 공식 저장소 또는 그 미러를 통해 Apache2 서버를 설치하는 경우 컴파일 설치 시 적용되는 기본값과는 다른 기본값을 지니게 됩니다.

그 이유는 각 리눅스 배포판을 개발, 유지보수하는 팀이 자신들의 리눅스에 맞춰 재컴파일하여 패키징하기 때문입니다.

만약 컴파일 설치 시 ServerRoot의 기본 위치를 바꾸고자 한다면 --prefix 인수를 사용하여 수정할 수 있습니다.

 

#ServerRoot "/etc/apache2"

ServerRoot 디렉터리를 /etc/apache2로 지정합니다.

주석처리되어 있지만 주석처리되어 있거나 말거나 기본값은 /etc/apache2입니다.

 

지시어 : ServerRoot

요약 설명 : 서버 설치 디렉터리

구문 : ServerRoot 디렉터리 경로

기본값 : ServerRoot /usr/local/apache

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

상태 : Core

모듈 : core

위 설명은  Apache HTTP Server Version 2.4 Modules 페이지의 Apache Core Features 섹션 중 지시어 ServerRoot 파트의 요약 설명 상자 내용을 그대로 옮긴 것입니다만 위 설명이 정확한 것은 아닙니다.

ServerRoot 지시어는 단순히 서버 설치 디렉터리를 의미하지 않습니다. 보다 적확히 표현하자면 Apache2 서버의 구성 설정, 오류 정보, 로그 기록 파일이 위치하는 디렉터리입니다.

위의 기본값은 Apache HTTP Server Project 팀이 공식 사이트에서 배포하는 소스 파일을 특별한 수정 없이 그대로 컴파일하여 설치할 때 적용되는 값입니다.

만약 컴파일 설치 시 ServerRoot의 기본 위치를 바꾸고자 한다면 --prefix 인수를 사용하여 수정할 수 있습니다.

 

설치된 Apache2 서버의 현재 ServerRoot 값은 아래와 같은 명령으로 확인할 수 있습니다.

 

study@study-VirtualBox:~$ apache2ctl -t -D DUMP_RUN_CFG
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default 
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used
study@study-VirtualBox:~$ 

위는 Ubuntu 20.04에서 Apache2 서버를 설치했을 때 확인가능한 구성설정 값입니다.

ServerRoot / Main DocumentRoot / Main ErrorLog /

Mutex mpm-accept / Mutex watchdog-callback / Mutex default /

PidFile / Define / User / Group

위와 같은 기본 항목 설정값을 확인할 수 있습니다.

Apache2와 관련된 디렉터리는 아래와 같이 확인할 수 있습니다.

 

study@study-VirtualBox:~$ sudo find / -name apache2
[sudo] study의 암호: 
/run/apache2
find: ‘/run/user/1000/doc’: 허가 거부
find: ‘/run/user/1000/gvfs’: 허가 거부
/run/lock/apache2
/usr/share/bug/apache2
/usr/share/lintian/overrides/apache2
/usr/share/doc/apache2
/usr/share/apache2
/usr/sbin/apache2
/usr/lib/php/7.4/sapi/apache2
/usr/lib/apache2
/etc/php/7.4/apache2
/etc/ufw/applications.d/apache2
/etc/apache2
/etc/cron.daily/apache2
/etc/init.d/apache2
/etc/logrotate.d/apache2
/var/cache/apache2
/var/log/apache2
/var/lib/php/modules/7.4/apache2
/var/lib/apache2
study@study-VirtualBox:~$ 

설치 후 나중에 ServerRoot 값을 수정하고자 한다면 이 파일을 열어 직접 수정하거 아니면 아래와 같은 명령을 실행하여 적용할 수 있습니다.

 

study@study-VirtualBox:~$ udo apache2ctl -d 디렉터리

 

디렉터리를 수정할 때 디렉터리 경로 끝에 /(슬래시)를 덧붙이면 안됩니다.

 
다른 구성 지시어 (예 : Include 또는 LoadModule)의 상대 경로는 이 디렉토리를 기준으로 합니다.

 

ServerRoot를 위한 보안 강화 팁은 아래 링크를 참고하시기 바랍니다.

http://httpd.apache.org/docs/2.4/misc/security_tips.html#serverroot

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

#Mutex file:$ default

Apache2에서 사용하는 잠금 파일의 위치를 설정합니다. 특별한 이유(ServerRoot 디렉터리 등이 NFS에 위치하는 등)가 없는 한 위 기본값을 그대로 놔두어야 합니다.

Mutex file 파일을 APACHE_LOCK_DIR 변수에서 지정된 값으로 설정하며 두번째 인수를 default로 설정하여 모든 Mutex에 대한 설정을 변경합니다.

 

지시어 : Mutex

요약 설명 : 모든 또는 지정된 뮤텍스에 대한 뮤텍스 메커니즘 및 잠금 파일 디렉토리를 구성

구문 : Mutex mechanism [default|mutex-name] ... [OmitPID]

기본값 : Mutex default

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

상태 : Core

모듈 : core

호환성 : Apache HTTP Server 2.3.4 이상

Mutex 지시어는 httpd 및 모듈이 리소스에 대한 액세스를 직렬화하는 데 사용하는 메커니즘과 추가적으로 잠금 파일 위치를 설정할 때 사용합니다.

특별한 이유가 없다면 이 지시어는 따로 설정하지 않는 것을 권장합니다.

 

Mutex 지시어에 대한 보다 자세한 설명은 아래 링크를 참고하시기 바랍니다.

http://httpd.apache.org/docs/2.4/mod/core.html#mutex

 


 

DefaultRuntimeDir $

기본 런타임 디렉터리 디렉터리를 APACHE_RUN_DIR 변수에서 지정한 값으로 지정합니다.

APACHE_RUN_DIR 변수는 envvars 파일에서 설정되어 있습니다.

export APACHE_RUN_DIR=/var/run/apache2$SUFFIX

기본값은 위와 같이 설정되어 있습니다. 즉 따로 SUFFIX가 설정되어 있지 않다면 /var/run/apache2가 해당 경로입니다.

참고로 우분투 20.04의 /var/run/ 디렉터리는 /run의 심볼릭링크입니다. 즉 실제 내용은 /run 아래에 있습니다.

study@study-VirtualBox:~$ ls -l /var/run
lrwxrwxrwx 1 root root 4  6월 29 13:29 /var/run -> /run
study@study-VirtualBox:~$ 

따라서 Apache2의 실제적인 기본 런타임 디렉터리는 /run/apache2가 됩니다.

 

지시어 : DefaultRuntimeDir

요약 설명 : 서버 런타임 파일들의 기본 디렉터리

구문 : DefaultRuntimeDir 디렉터리 경로

기본값 : DefaultRuntimeDir DEFAULT_REL_RUNTIMEDIR (logs/)

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

상태 : Core

모듈 : core

호환성 : Apache HTTP Server 2.4.2 이상

DefaultRuntimeDir 지시어는 서버가 공유 메모리(ShM - share memory), 잠금 등 다양한 런타임 파일을 생성할 기본 디렉터리를 설정합니다.

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

http://httpd.apache.org/docs/2.4/mod/core.html#defaultruntimedir

 


 

PidFile $

데몬의 프로세스 ID를 저장할 파일을 APACHE_PID_FILE 변수에서 지정한 값으로 지정합니다.

우분투 20.04의 경우 $로 구성되는데 이 변수 내용은 /etc/apache2/envvars에 설정해야합니다. 설정 부분은 아래입니다.

export APACHE_PID_FILE=/var/run/apache2$SUFFIX/apache2.pid

위 파일은 아무런 내용은 없고 단지 아파치 데몬의 프로세스 ID 번호만 기록됩니다.

 

지시어 : PidFile

요약 설명 : 서버가 데몬의 프로세스 ID를 기록하는 파일

구문 : PidFile 파일명

기본값 : PidFile logs/httpd.pid

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

상태 : MPM

모듈 : event, worker, prefork, mpm_winnt, mpmt_os2

PidFile 지시어는 서버가 시작될 때 프로세스 식별 번호를 기록하는 파일을 지정합니다. 상대 경로로 설정된 경우 전체 경로는 ServerRoot를 기준으로 삼아 상대적으로 구성됩니다.

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

http://httpd.apache.org/docs/2.4/mod/mpm_common.html#pidfile

 

 


 

Timeout 300

서버와 클라이언트 간의 전송 및 수신 최대 대기 시간을 300초로 설정합니다.

 

지시어 : Timeout

요약 설명 : 서버가 특정 이벤트를 기다리는 최대 시간(초)

구문 : Timeout 숫자(초)

기본값 : Timeout 60

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

서버와 클라이언트 간의 전송 및 수신의 최대 대기 시간을 설정합니다. 이때 설정 단위는 '초'입니다. 설정 시간 내에 어떤 응답도 발생하지 않으면 연결을 끊습니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

KeepAlive On

HTTP 지속 연결을 활성화합니다.

 

지시어 : KeepAlive

요약 설명 : HTTP 지속 연결을 활성화

구문 : KeepAlive On | Off

기본값 : KeepAlive On

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

지속적 연결(persistent connection) 여부를 설정합니다.

본래 HTTP 프로토콜은 클라이언트가 서버에 데이터를 요청하고 서버 측에서 그에 대한 응답으로 요구한 데이터를 전송하고 나면 더 이상 연결을 유지하지 않고 끊습니다. 따라서 클라이언트가 여러 데이터를 요청하려면 각 요청에 따른 연결을 매번 반복해야 합니다. HTTP 프로토콜이 이렇게 설계된 것은 다수 클라이언트의 원활한 접속 및 요청 기회를 보장하기 위함이었습니다.

그러나 HTTP의 이러한 특성은 각 클라이언트에서 수많은 데이터를 요청하게 된 현재의 네트워크 환경에서는 그다지 좋은 선택이 아닐 수 있습니다. 각 데이터 링크 연결 작업은 생각 외로 많은 자원을 필요로 하는데 그 내용은 다음과 같습니다

3-way handshake로 인한 지연 시간

새로운 연결될 만들 때마다 사용되는 CPU, 메모리 리소스

즉 하나의 요청마다 일일이 연결하고 끊기를 반복하는 것은 불필요한 자원이 낭비되는 것입니다. 만약 HTTP keepalive 기능을 사용하면 한번 연결된 커넥션을 재사용함으로써 시간과 자원을 아낄 수 있습니다.

HTTP의 이런 연결 비지속성으로 인한 단점을 개선하기 위해 고안된 HTTP/1.0에 대한 Keep-Alive 확장과 HTTP/1.1의 지속 연결 기능은 동일한 연결을 통해 여러 요청을 보낼 수 있는 수명이 긴 HTTP 세션을 제공합니다.

Apache 서버 개발진은 경우에 따라서는 이미지가 많은 HTML 문서(정적 웹문서)의 대기 시간이 대략 50% 정도까지 줄어든다고 말하고 있습니다.

이렇게 보면 keepalive는 늘 허용하는 것이 좋은 옵션으로 보입니다. 그러나 keepalive가 늘 좋은 전략인 것은 아닙니다. 그 이유는 서버가 가용할 수 있는 메모리의 용량에 따라 연결을 맺을 수 있는 소켓을 생성하는데 한계가 존재하기 때문입니다. 따라서 keepalive를 무제한 허용하면 서버와의 연결을 선점한 소수의 클라이언트가 장기간 연결을 점유하여 테이터를 주고 받을 수 있게 되고 그외 다수의 클라이언트는 연결 기회를 얻지 못하게 됩니다.

따라서 keepalive 지시어가 On으로 활성화되어 있는 경우(기본값) 서버가 사용하 수 있는 자원과 접속자 수 등을 감안하여 keepalive에 대한 적절한 제한을 걸어주는 것이 필요합니다. 이때 사용되는 주된 관련 지시어가 아래의 네 가지입니다.

MaxKeepAliveRequests : KeepAlive가 켜져있을 때 지속적 연결 중에 연결 당 허용할 최대 요청 수

KeepAliveTimeout : 서버가 지속적 연결에 대한 후속 요청을 기다리는 시간

MaxRequestWorkers : 동시 처리 최대 연결 수

MaxConnectionsPerChild : 개별 자식 서버 프로세스가 처리 할 연결 수에 대한 제한

지시어 MaxRequestWorkers는 Apache 버전 2.3.13 이전에는 MaxClient라 불렸습니다. 옛 지시어명은 지금도 지원됩니다.

지시어 MaxConnectionsPerChild는 Apache 버전 2.3.9 이전에는 구 지시어 MaxRequestsPerChild라 불렸습니다. 옛 지시어명은 지금도 지원됩니다.

HTTP/1.1 클라이언트가 Keep-Alive 연결을 사용할 경우, 전송되는 요청의 수에 관계없이 MaxConnectionsPerChild 명령에 대한 단일 "요청"으로 계산됩니다.

 

HTTP/1.0 규격을 이용하는 클라이언트의 경우

클라이언트가 Keep-Alive 연결을 사용하려면 요청에 Connection:Keep-Alive 요청헤더를 포함시켜 서버 측에 보내게 됩니다. 이 요청 헤더가 없다면 서버가 회신을 보낸 후 연결을 끊을 것이라 예상할 수 있습니다.

이 HTTP/1.0 클라이언트와의 Keep-Alive 연결은 콘텐츠의 길이를 미리 알 수 있을 때만 사용할 수 있습니다. 이때 콘텐츠 길이를 미리 알 수 있다는 것은 순수 HTML 문서 등 정적 웹문서 등에만 적용됩니다.

반면에 CGI 출력, SSI 페이지 및 서버 생성 디렉터리 목록과 같은 동적 콘텐츠에는 일반적으로 HTTP/1.0 클라이언트에 대한 Keep-Alive 연결을 사용하지 않음을 의미합니다.

 

HTTP/1.1 이후의 규격을 이용하는 클라이언트의 경우

별도의 지정이 없는 한 지속 연결이 기본값입니다. 클라이언트가 요청하면 알 수 없는 길이의 콘텐츠를 지속 연결로 전송하기 위해 청크 처리된 인코딩이 사용됩니다.

 

 

HTTP의 연결 관리에 대한 심화된 내용 아래 링크르 참고하시기 바랍니다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Connection_management_in_HTTP_1.x

https://goodgid.github.io/HTTP-Keep-Alive/

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

MaxKeepAliveRequests 100

KeepAlive가 켜져있을 때 지속적 연결 중에 연결 당 허용할 최대 요청 수를 100개로 설정합니다.

 

지시어 : MaxKeepAliveRequests

요약 설명 : 지속적 연결 중에 허용할 최대 요청 수

구문 : MaxKeepAliveRequests 숫자

기본값 : MaxKeepAliveRequests 100

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

MaxKeepAliveRequests 지시어는 KeepAlive가 켜져있을 때 지속적 연결 중에 연결 당 허용할 최대 요청 수입니다.

무제한으로 허용하려면 0으로 설정하십시오. 최대 성능을 위해 이 숫자를 높게 유지하는 것이 좋습니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

KeepAliveTimeout 5

서버가 지속적 연결에 대한 후속 요청을 기다리는 시간을 5초로 설정합니다.

 

지시어 : KeepAliveTimeout

요약 설명 : 서버가 지속적 연결에 대한 후속 요청을 기다리는 시간

구문 : KeepAliveTimeout 숫자

기본값 : KeepAliveTimeout 5

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

Apache 서버가 연결을 닫기 전에 동일한 연결에서 동일한 클라이언트의 후속 요청을 기다리는 시간 (초)를 설정합니다. 만약 접미사 ms를 추가하면 제한 시간을 밀리 초 단위로 설정할 수도 있습니다. 요청이 수신되면 Timeout 지시어에 지정된 시간값이 적용됩니다.

설정 값이 낮을 수록 동시 접속수를 늘릴 수 있습니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

User $

서버가 요청에 응답할 사용자 ID를 APACHE_RUN_USER 변수가 지정하는 값으로 지정합니다.

 

지시어 : User

요약 설명 : 서버가 요청에 응답할 사용자 ID

구문 : User unix-userid

기본값 : User #-1

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

상태 : Base

모듈 : mod_unixd

User 지시어는 서버가 요청에 응답 할 사용자 ID를 설정합니다.

Unix-userid는 아래와 설정할 수 있습니다.

사용자 이름

#-사용자 번호(uid)

사용자는 외부에 보이도록 의도되지 않은 파일에 액세스할 수 있는 권한이 없어야 하며, 이와 유사하게 사용자는 HTTP 요청에 적합하지 않은 코드를 실행할 수 없어야 합니다.

Apache2를 기본값으로 컴파일 설치하는 경우 User 지시어의 기본값은 User #-1로 설정되어 있는데 /etc/passwd 파일을 열어 해당 uid를 확인해 보면 보통 아래와 같이 나옵니다.

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

위는 우분투의 해당 uid 정보입니다.

그러나 서버 실행을 위해 특별히 새 사용자 및 그룹을 설정하는 것이 좋습니다.

 

실제로 근래 리눅스 배포판들은 아래와 같이 Apache2 서버 등을 설치하기 전 부터 웹 서버 등을 구동하기 위한 계정을 미리 만들어 놓습니다.

www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

또한 주 서버 설정(server config) - httpd.conf 또는 apache2.conf파일에 User 지시어 값 또한 다르게 설정합니다.

User $

위는 우분투에서 저장소를 통해 Apache2 서버를 설치한 경우 User 지시어 값입니다. 변숫값으로 지정되어 있습니다.

해당 변숫값 내용은 /etc/apache2/envvars에서 설정합니다.

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_unixd.html#user

 


 

Group $

서버가 요청에 응답할 그룹 ID를 APACHE_RUN_GROUP 변수가 지정하는 값으로 설정합니다.

 

지시어 : Group

요약 설명 : 서버가 요청에 응답할 그룹 ID

구문 : Group unix-group

기본값 : Group #-1

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

상태 : Base

모듈 : mod_unixd

Group 지시어는 서버가 요청에 응답 할 그룹을 설정합니다.

Unix-group은 아래와 같은 방법으로 지정할 수 있습니다.

사용자 이름

#-그룹 번호(gid)

서버 실행을 위해 특별히 새 그룹을 설정하는 것이 좋습니다.

자세한 내용은 User 지시어 설명을 참고하시기 바랍니다.

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_unixd.html#group

 


 

HostnameLookups Off

서버의 호스트 조회 기능을 꺼놓습니다.

 

지시어 : HostnameLookups

요약 설명 : 클라이언트 IP 주소에 대한 DNS 조회 활성화

구문 : HostnameLookups On|Off|Double

기본값 : HostnameLookups Off

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

이 지시어는  DNS 조회를 활성화하여 서버에 접속을 요청하는 클라이언트의 호스트이름을 기록합니다.

웹서버는 보통 방문자들에 대한 접근 기록(access.log)을 남겨 둡니다. 아파치의 경우 이 기록은 보통 아래의 위치에 있는 것이 일반적입니다.

   /var/log/apache/access.log

   /var/log/apache2/access.log

   /etc/httpd/logs/access_log

 

10.0.2.2 - - [12/Sep/2020:14:53:17 +0900] "GET /phpinfo.php HTTP/1.1" 200 24241 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0"

access.log 파일에는 위와 같은 형식으로 방문자들의 정보를 기록합니다.

 

지시어 설정값이 On인 경우

해당 내용을 보면 알 수 있듯 IP 주소가 기록되는데  만약 HostnameLookups 지시어 설정값이 On으로 되어 있다면 해당 IP에 대하여 DNS에 질의를 하게 됩니다.

질의 결과 해당 IP 주소에 대한 도메인 정보(호스트 이름)가 있을 경우에는 access.log의 접속 IP 주소 자리에 IP 주소 대신 도메인명을 기록하고, 도메인 정보가 없으면 IP 주소를 기록합니다.

 

지시어 설정값이 Off인 경우 - 기본값

Apache2 1.3 전에는 기본값이 On이었습니다. 그러나 요청이 끝나기 전에 DNS 조회가 끝나야 하므로 요청마다 지연이 생겼습니다. DNS 조회가 일반적인 경우 필수적인 설정은 아닌 데다가 오히려 이 로그 처리를 위해 성능을 떨어 뜨리므로 Apache2 1.3부터 기본값을 Off로 변경했습니다.

 

지시어 설정값이 Double인 경우

그러나 서버에서 Allow from domain이나 Deny from domain 지시어 같이 IP 주소가 아닌 호스트명이나 도메인명을 사용하는 경우 보안을 위해 Double 값을 사용해야 합니다.

Double 값은 이중 DNS 조회를 수행함을 나타냅니다. 즉, 역방향 조회가 수행된 후 해당 결과에 대해 정방향 조회를 수행합니다. 정방향 조회의 IP 주소 중 하나 이상이 원래 주소와 일치해야 합니다. 이러한 중복 조회를 통해 악의적인 연결 유도를 방지합니다.

단 이때 조회 작업을 두 번하므로 그만큼 시간이 더 걸리고 트래픽 부하도 더 걸린다는 것을 감안해야 합니다.

따라서 보안 등 부득이한 경우가 아니라면 지시어 등에는 IP 주소 기반으로 로그 기록을 남기고 HostnameLookups 설정값을 Off로 하는 것을 권장합니다.

 

참고로 지시어 적용 범위를 제한할 수도 있습니다. 예를 들어 특정 확장자의 파일에 대한 접속자만 호스트 정보를 기록할 수 있는데 아래는 그 예시 구문입니다. 

HostnameLookups off

<Files ~ "\.(html|cgi)$">
HostnameLookups on
</Files>

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

https://httpd.apache.org/docs/2.4/logs.html#accesslog

 


 

ErrorLog $/error.log

서버의 오류를 APACHE_LOG_DIR 변수가 지정한 디렉터리 안의 error.log 파일에 기록합니다.

위는 우분투에서 저장소를 통해 Apache2 서버를 설치한 경우 User 지시어 값입니다. 변숫값으로 지정되어 있습니다.

해당 변숫값 내용은 /etc/apache2/envvars에서 설정합니다.

export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

 

지시어 : ErrorLog

요약 설명 : 서버가 오류를 기록할 파일

구문 : ErrorLog file-path|syslog[:[facility][:tag]]

기본값 : ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

오류 로그 파일 위치입니다.

 

인수가 파일로 지정된 경우

<VirtualHost> 컨테이너 내에 따로 ErrorLog 지시어를 설정하지 않으면 해당 가상 호스트와 관련된 오류 메시지가 여기에 기록됩니다. <VirtualHost> 컨테이너에 대한 오류 로그 파일을 정의하면 해당 호스트의 오류가 따로 지정한 파일에 기록됩니다.

<VirtualHost> 컨테이너에 대한 오류 로그 파일을 정의 예시는 아래 링크를 참고하시기 바랍니다.

2020/10/26 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정

 

인수가 syslog로 지정된 경우

syslog는 오래된 시스템 로깅 표준 프로그램입니다.

syslog에 대한 개략적인 설명은 아래 링크들을 참고하시기 바랍니다.

https://en.wikipedia.org/wiki/Syslog

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

LogLevel warn

로그를 기록하는 최저 상황 수준을 설정합니다.

 

지시어 : LogLevel

요약 설명 : ErrorLog의 기록 수준 설정

구문 : LogLevel [module:]level [module:level] ...

기본값 : LogLevel warn

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

  디렉터리

상태 : Core

모듈 : core

LogLevel은 오류 로그에 기록되는 메시지의 상세 정도를 조정합니다.

중요성이 높은 순서로 다음 수준을 사용할 수 있습니다.

emerg : 최고 위험 등급의 긴급 상황 발생 시

alert : 즉시 문제 해결 조치가 필요한 상황 발생 시

crit : 위 두 단계 정도까지는 아니지만 치명적인 시스템 문제 발생 시

error : 오류 발생 시

warn : 주의가 필요한 문제 발생 시

notice : 일반적이긴 하지만 꽤 중요한 상황 발생시

info : 서버 운용 상 필요한 정보 제공 필요 시

debug : 디버깅 작업 수준

trace1 : 추적 메시지

trace2 : 추적 메시지

trace3 : 추적 메시지

trace4 : 추적 메시지

trace5 : 추적 메시지

trace6 : 추적 메시지

trace7 : 대량의 데이터를 덤프하는 추적 메시지

trace8 : 대량의 데이터를 덤프하는 추적 메시지

LogLevel 수준을 지정하면 지정된 수준 이상의 모든 메시지가 기록됩니다. 예를 들어 LogLevel을 error로 지정하면 error를 포함하여 crit, alert, emerg 수준의 상황이 발생 시 로그가 기록됩니다.

 

특정 모듈 지정 없이 LogLevel을 지정하면 모든 모듈의 LogLevel이 해당 수준 이상으로 설정됩니다.

특정 모듈을 위한 log level 설정도 가능한데 예시는 다음과 같습니다.

LogLevel info ssl:warn

이때 모듈 지정은 아래와 같이 세가지 유형으로 설정할 수 있습니다.

LogLevel info mod_ssl.c:warn
LogLevel info ssl_module:warn
LogLevel info ssl:warn

위에서 보듯 모듈 소스 파일 이름, 모듈 식별자 또는 _module 꼬리가 빠진 모듈 식별자 이 세 형태로 지정할 수 있습니다.

 

LogLevel을 모듈별이 아닌 디렉터리별로도 지정할 수 있습니다.

LogLevel info

<Directory "/usr/local/apache/htdocs/app">
  LogLevel debug
</Directory>

 

원활한 서버 운용을 위해 최소한 crit 수준 이하의 LogLevel 지정하는 것을 권장합니다.

LogLevel 설정 팁

개발 시에는 최대한 자세하게

서버 운여 시에는 필요한 정보만(최소 crit 권장)

 

오류 로그(error.log) 기록 예시

오류 로그(error.log) 파일에 아래와 유사한 형식으로 기록됩니다.

[Mon Oct 19 11:36:33.334332 2020] [mpm_prefork:notice] [pid 977] AH00171: Graceful restart requested, doing restart

 

[Sun Oct 18 13:17:38.475854 2020] [ssl:warn] [pid 785] AH01906: virtualhost01.net:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

서버 기동 시 구성 파일을 읽어들일 때 다른 문서로 따로 설정된 구성파일도 함께 읽어 들이도록 설정합니다.

여기서는 활성화할 모듈의 로드 파일과 구성 파일을 함께 읽어 들이도록 설정했습니다.

 

지시어 : IncludeOptional

요약 설명 : 서버 구성 파일 외에 추가 서버 구성 파일 포함

구문 : IncludeOptional file-path|directory-path|wildcard

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

   디렉터리

상태 : Core

모듈 : core

호환성 : 2.3.6 이상에서 사용 가능

이 IncludeOptional 지시어를 사용하면 서버 구성 파일 내에서 다른 구성 파일(주로 모듈 등)을 포함 할 수 있습니다.

Include 지시어와 동일한 기능을 갖습니다만 와일드 카드를 사용할 수 있고 어떤 파일이나 디렉터리와도 일치하지 않거나 파일 시스템에 파일 경로가 없는 경우 구문오류가 발생하지 않고 자동으로 무시합니다. 이때 자동 무시 기능은 Apache2 서버 2.4.30 이후부터 적용되어 있습니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

Include ports.conf

서버 기동 시 구성 파일을 읽어들일 때 포트 구성 파일도 포함합니다.

 

지시어 : Include

요약 설명 : 서버 구성 파일 외에 추가 서버 구성 파일 포함

구문 : Include file-path|directory-path|wildcard

기본값 :

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

   디렉터리

상태 : Core

모듈 : core

호환성 : 2.3.6 이상에서 사용 가능

수신할 포트 목록 설정을 포함(인클루드)합니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

#<Directory /srv/>
#    Options Indexes FollowSymLinks
#    AllowOverride None
#    Require all granted
#</Directory>

Apache2 HTTPD 서버의 기본 보안 모델을 설정합니다.

지시어 Options FollowSymLinks

심볼릭 링크 허용 - 웹브라우저에서 심볼릭 링크를 통해 링크된 실제 파일에도 전그날 수 있도록 허용합니다. 당연히 보안 측면에서 좋은 설정은 아닙니다.

지시어 AllowOverride None

액세스 인증 파일 무시 - 위 지시어를 통해 지시어 AccessFileName에 지정된 파일(일반적으로 .htaccess<분산구성파일>)을 액세스 인증 파일로 인정하지 않아  해당 파일을 새로운 접근 인증 방식으로 재정의하지 않습니다. 보안 등을 위해 아주 제한적인 접근만을 허용할 때에 사용됩니다.

지시어 Require all denied

해당 디렉터리에 대한 모든 접근을 거부합니다.

지시어 Require all granted

해당 디렉터리에 대한 모든 접근을 허용합니다.

 

위 지시어를 바탕으로 위 구문을 읽어보면 /usr/share 및 /var/www를 통한 접근을 제외한 외부의 루트 파일 시스템에 대한 액세스를 허용하지 않습니다.

 

/usr/share 디렉터리는 데비안 계열 OS에 패키지된 웹 관련 응용 프로그램에서 사용됩니다. 그렇다고 반드시 웹 관련 프로그램만 사용되는 것은 아닙니다.

/var/www 디렉터리는 웹 서버에서 사용할 수 있는 디렉터리로 일반적으로 /var/www/html을 웹서버 루트 디렉터리로 사용합니다.

/srv 디렉터리는 시스템에서 제공되는 사이트의 특정 데이터를 모아놓는 곳입니다. 따라서 시스템이 /srv의 하위 디렉터리에서 콘텐츠를 제공하는 경우 여기 또는 모든 관련 가상 호스트에서 액세스를 허용해야합니다.

 

<Directory /> ~ </Directory> 섹션 안의 Apache2 지시어(Directory, Options, AllowOverride, Require)에 대한 설명은 아래 링크를 참고하시기 바랍니다.

2020/10/15 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] security.conf의 기본값에 사용된 지시어 설명

 

 


 

AccessFileName .htaccess

분산 구성 파일의 이름을 설정합니다. 분산 구성 파일의 표준명은 .htaccess로 고정되었습니다.

 

지시어 : AccessFileName

요약 설명 : 분산 구성 파일 지정

구문 : AccessFileName filename [filename] ...

기본값 : AccessFileName .htaccess

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Core

모듈 : core

AccessFileName 지시어가 설정되어 있는 경우, 서버가 어떤 문서에 대한 요청을 처리를 할 때 해당 문서경로의 디렉터리마다 AccessFileName 지시어에 지정된 환경설정 파일을 찾아 가장 가까운 첫 번째 파일을 적용합니다.

 

<Directory "/">
    AllowOverride None
</Directory>

예를 들어 구성 파일에 AccessFileName local.conf 이 설정되어 있고 만약 위 상자와 같은 구문 등으로 비활성화되어 있지 않다면, 클라이언트에 의해 /usr/local/web/index.html 문서에 대한 요청을 반환하기 전 서버는 아래 경로의 문서를 찾아 지시사항을 읽고 처리를 합니다.

/local.conf
/usr/local.conf
/usr/local/local.conf
/usr/local/web/local.conf

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

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

 


 

<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>

위 구성은 웹 클라이언트쪽에서 .htaccess 및 .htpasswd 파일을 볼 수 없도록 설정하는 지시어입니다.

정확히는 '.ht'로 시작하는 모든 파일에 대한 접근을 거부하는 것입니다.

보안을 위해 이 구성은 수정하지 않는 것을 권장합니다.

 

다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

2020/10/19 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] default-ssl.conf의 기본값에 사용된 지시어 설명

 


 

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%i\" \"%i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%i\" \"%i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%i -> %U" referer
LogFormat "%i" agent

로그 파일에 사용할 형식을 설정합니다.

위 구성은 CustomLog 지시문에서 쓰일 몇 가지 포맷에 대한 별명을 정의합니다.

위 지시어는 %b (요청된 파일의 크기) 대신 %O (헤더를 포함하여 전송된 실제 바이트)를 사용한다는 점에서 공통 로그 형식 정의와 다릅니다.

 

지시어 : LogFormat

요약 설명 : 로그 파일에 사용할 형식을 설정

구문 : LogFormat format|nickname [nickname]

기본값 : LogFormat "%h %l %u %t \"%r\" %>s %b"

사용 장소 : 주서버 설정(server config) - httpd.conf 또는 apache2.conf

   가상호스트 (virtual host) 섹션 안

상태 : Base

모듈 : mod_log_config

LogFormat 지시어는 다른 지이어들과 연계하여 두 가지 방식으로 사용할 수 있습니다.

 

첫 번째는 하나의 인수(로그 형식 인수)만 지정하는 것입니다. 이 경우 지시어는 후속하는 TransferLog 지시어에 지정된 로그에서 사용될 로그 형식을 설정합니다.

예시는 아래와 같습니다.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%i\" \"%i\""
TransferLog logs/access_log

TransferLog 지시어에서 지정된 파일의 로그 형식은 별명을 정의하지 않은 가장 최근 지정 LogFormat 지시어에 의해 결정됩니다.

 

두 번째는 LogFormat 지시어에 특정 로그 형식에 별명을 부여한 다음 CustomLog 지시어를 이용해 특정 로그 파일에 적용할 로그 형식을 사전 정의한 별명으로 지정하는 것입니다.

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

이 별명은 전체 형식 문자열을 반복하지 않고 후속 LogFormat 또는 CustomLog 명령에서 사용할 수 있습니다.

별명을 정의하는 LogFormat 지시어는 다른 것은 하지 않습니다. 즉, 별명만 정의하고 로그 형식을 실제로 적용하지는 않습니다. 따라서 후속 TransferLog 지시어에는 영향을 끼치지 않습니다.

이때 별명을 지정할 때는 퍼센트 기호(%)가 포함되지 않아야 합니다.

 

로그 형식 예시

우분투에서 설치한 Apache2의 apache2.conf에 설정된 로그 형식 별명 common의 로그 형식

LogFormat "%h %l %u %t \"%r\" %>s %O" common

 

컴파일 설치한 Apache2의 로그 형식 기본값

LogFormat "%h %l %u %t \"%r\" %>s %b"

 

%h : 원격 호스트네임

%l : 연격 로그네임

%u : 요청이 인증된 원격 사용자

%t : 수신한 요청 시각

%r : 요청의 첫 줄

%s : 상태

%O : 헤더를 포함한 전송 바이트 수

%b : HTTP 헤더를 제외한 응답 크기 (바이트)

 

보다 많은 로그 형식 문자열에 대한 정보느 아래 리크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/en/mod/mod_log_config.html#formats

한글로 번역된 것은 내용이 부실하므로 위 링크를 참고하시기 바랍니다.

 

보다 자세한 내용은 아래 링크를 참고하시기 바랍니다.

https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#logformat

https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#transferlog

https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#customlog

https://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats

 


 

IncludeOptional conf-enabled/*.conf

서버 구동 시 읽어들여 활성화할 추가 구성 지시문을 설정합니다.

/etc/apache2/conf-enabled 디렉터리 내의 모든 추가 구성 지시문 파일을 활성화한다는 의미입니다.

 

IncludeOptional sites-enabled/*.conf

서버 구동 시 읽어들여 활성화할 가상 호스트 구성 지시문을 설정합니다.

/etc/apache2/sites-enabled 디렉터리 내의 모든 추가 구성 지시문 파일을 활성화한다는 의미입니다.