소개
아파치는 인터넷 상에서 가장 인기 있는 웹 서버 중 하나입니다. 현재 활성화된 웹 사이트의 절반 이상을 제공하는 데 사용됩니다. 콘텐츠를 제공할 수 있는 많은 유효한 웹 서버가 있지만, 아파치가 보편성을 갖고 있기 때문에 아파치가 어떻게 작동하는지 이해하는 것이 도움이 됩니다.
이 기사에서는 일반적인 구성 파일과 그 안에서 제어할 수 있는 옵션을 살펴보겠습니다. 이 기사는 다른 배포판이 구성 계층을 구성하는 방식과 다르게 우분투/데비안 레이아웃을 따를 것입니다.
전제 조건
우분투 버전 16.04 이하를 사용 중이라면, 우분투가 이러한 버전에 대한 지원을 더 이상 제공하지 않기 때문에 최신 버전으로 업그레이드하는 것이 좋습니다. 이 가이드 모음을 통해 우분투 버전을 업그레이드하는 데 도움을 받을 수 있습니다.
-
sudo 권한을 가진 루트가 아닌 사용자와 활성화된 방화벽이 있는 우분투 서버. 이러한 설정 방법에 대한 안내는 이 목록에서 자신의 배포판을 선택하고 초기 서버 설정 가이드를 따르십시오.
-
Apache 구성을 탐색하기 전에 서버에 Apache를 설치해야합니다. 우분투에 Apache 웹 서버를 설치하는 방법은 “우분투에 Apache 웹 서버 설치하기” 튜토리얼을 따라 배울 수 있습니다. 22.04 / 20.04 / 18.04 또는 데비안 10에 Apache 웹 서버 설치하기 튜토리얼을 따를 수도 있습니다.
우분투에서 아파치 웹 서버 구성하는 단계 5
단계 1: 아파치 파일 계층
아파치는 기본 구성 파일을 /etc/apache2
폴더 안에 저장합니다. 다음 명령을 실행하면 이 폴더 안에 있는 모든 파일을 나열할 수 있습니다:
Outputenvars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available
이 디렉토리 안에는 일련의 일반 텍스트 파일과 몇 개의 하위 디렉토리가 있습니다. 여기 몇 가지 유용한 위치가 있습니다:
apache2.conf
: 이 파일은 서버의 주 구성 파일입니다. 거의 모든 구성은 이 파일 내에서 처리될 수 있지만, 간편함을 위해 별도의 지정된 파일을 사용하는 것이 권장됩니다. 이 파일은 기본값을 구성하고 서버가 구성 세부 정보를 읽는 중심점이 될 것입니다.ports.conf
: 이 파일은 가상 호스트가 수신 대기해야 하는 포트를 지정하는 데 사용됩니다. SSL을 구성 중이라면 이 파일이 올바른지 확인하십시오.sites-available/
및sites-enabled/
:sites-available
디렉토리에는 가상 호스트 파일 구성이 포함되어 있습니다. 이 폴더 내의 구성은 어떤 요청에 대해 어떤 콘텐츠가 제공되는지를 설정합니다. 이는 활성화된 가상 호스트 구성 파일을 저장하는sites-enabled
디렉토리로 링크하여 가능합니다. 아파치가 시작되거나 다시로드될 때, 이는 전체 구성을 컴파일하는 동안sites-enabled
디렉토리 내부의 구성 파일과 링크를 읽습니다.conf-available/
및conf-enabled/
: 이 디렉토리에는 가상 호스트 구성 파일과 연결되지 않은 구성 조각이 포함됩니다.mods-enabled/
및mods-available/
: 이러한 디렉토리는 선택적으로 로드할 수 있는 모듈을 정의합니다. 이 디렉토리에는 두 가지 구성 요소가 포함되어 있습니다: 특정 모듈을 로드하는 조각을 포함하는.load
로 끝나는 파일과 이러한 모듈의 구성을 저장하는.conf
로 끝나는 파일입니다.
아파치 구성은 단일 거대한 파일에서 이루어지지 않고, 대신 새 파일을 필요에 따라 추가하고 수정할 수 있는 모듈식 디자인으로 이루어집니다.
단계 2: Apache2.conf 파일 살펴보기
Apache 서버의 주요 구성 세부 정보는 /etc/apache2/apache2.conf
파일에 저장됩니다.
이 파일은 세 가지 주요 섹션으로 나뉩니다:
- 전역 Apache 서버 프로세스의 구성
- 기본 서버의 구성
- 가상 호스트의 구성.
이 파일을 선호하는 텍스트 편집기로 엽니다. 다음 예제는 nano
를 사용합니다:
Ubuntu 및 Debian에서는 이 파일이 전역 정의를 구성하는 데 사용됩니다. 기본 서버 및 가상 호스트의 구성은 Include
지시문을 사용하여 처리됩니다.
Include
지시문을 사용하면 Apache가 다른 구성 파일을 현재 파일로 읽어들여 지시문이 나타나는 위치에 동적으로 Apache가 시작될 때 포괄적인 구성 파일을 생성합니다.
이 파일 안에는 여러 다른 Include
및 IncludeOptional
문이 있습니다. 이러한 지시문은 모듈 정의, ports.conf
문서, conf-enabled/
디렉토리의 특정 구성 파일, 그리고 sites-enabled/
디렉토리의 가상 호스트 정의를 로드합니다:
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf
단계 3: 아파치 전역 구성 설정
전역 구성에서 수정할 수 있는 몇 가지 옵션이 있습니다:
Timeout
기본적으로 이 매개변수는 300
으로 설정됩니다. 이는 서버가 각 요청을 충족하는 데 최대 300초가 소요된다는 것을 의미합니다.
이 매개변수는 안전하게 30
에서 60
초 사이의 값으로 낮출 수 있습니다.
KeepAlive
이 옵션은 On
으로 설정되어 있으면 각 연결이 클라이언트로부터의 여러 요청을 처리하기 위해 열려 있는 상태로 유지됩니다.
이것이 Off
으로 설정되어 있으면 각 요청은 새로운 연결을 설정해야 하며, 이는 설정 및 트래픽 상황에 따라 상당한 오버헤드를 초래할 수 있습니다.
MaxKeepAliveRequests
이는 각 연결이 죽기 전에 처리할 수 있는 별도의 요청 수를 제어합니다. 이 숫자를 높게 유지하면 Apache가 각 클라이언트에게 콘텐츠를 더 효과적으로 제공할 수 있습니다.
기본 설정은 100
으로 되어 있습니다. 이 값을 0
으로 설정하면 Apache가 각 연결에 대해 무제한 양의 요청을 처리할 수 있습니다.
KeepAliveTimeout
이 설정은 마지막 요청을 완료한 후 다음 요청을 기다리는 시간을 지정합니다. 시간 초과 임계값에 도달하면 연결이 종료됩니다.
이는 다음에 콘텐츠가 요청될 때, 서버가 방문 중인 페이지를 구성하는 콘텐츠를 처리하기 위해 새로운 연결을 설정할 것을 의미합니다. 기본값은 5
로 설정되어 있습니다.
이 구성 파일의 내용을 검토한 후에는 CTRL+X
를 눌러 닫을 수 있습니다.
다중 처리 모듈
A Multi-Processing Module (MPM) extends Apache’s modular design. MPMs are responsible for listening, directing, and handling different network requests. You can cross-reference which section your Apache installation was compiled in with using the following command:
OutputCompiled in modules:
core.c
mod_so.c
mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c
서버에서 MPM 유형을 a2query -M
명령을 사용하여 확인할 수 있습니다:
Outputevent
출력에서 이 서버에서 event
MPM이 사용된 것을 확인할 수 있습니다. 설치된 시스템에는 여러 개의 MPM이 있을 수 있지만 선택할 수 있는 것은 하나뿐입니다.
단계 4: Apache 가상 호스트 파일 업데이트
기본 가상 호스트 선언은 sites-available/
디렉터리 내의 000-default.conf
파일에서 찾을 수 있습니다. 이 파일을 살펴서 일반적인 가상 호스트 파일 형식에 대해 알아볼 수 있습니다.
다음 명령을 사용하여 파일을 엽니다:
<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE LOG DIR}/error.log
CustomLog ${APACHE LOG DIR}/access.log combined
…
기본 가상 호스트는 표준 HTTP 포트인 80
에서의 모든 요청을 처리하도록 구성되어 있습니다. 이는 선언 헤더에 있는 *:80
에서 정의되어 있으며 이는 모든 인터페이스에서 포트 80
을 의미합니다.
그러나 이것은 이 포트에서 서버로의 각 요청을 반드시 처리한다는 것을 의미하지는 않습니다. Apache는 요청과 가장 구체적인 가상 호스트 정의를 사용합니다. 더 구체적인 정의가 있다면 이 정의를 대체할 수 있습니다. 파일을 확인한 후 CTRL+X
를 눌러 닫을 수 있습니다.
Apache Virtual Host Configuration
다음 옵션들은 다른 하위 선언 내부가 아닌 가상 호스트 정의 내에서 설정됩니다. 이들은 전체 가상 호스트에 적용됩니다.
먼저 conf-available/
디렉터리 내의 security.conf
파일을 엽니다:
이 파일에는 서버 문제 발생 시 사용할 연락 이메일을 지정할 수 있는 Server Signature
지시문이 포함되어 있습니다. 이 설정을 변경하여 기본 옵션인 On
을 EMail
로 바꾸면 서버 관리자 이메일 주소가 표시됩니다. 이 설정을 조정하면 메일을 수신할 의사가 있어야 합니다:
…
ServerSignature EMail
…
파일을 종료하려면CTRL+X
를 누릅니다. 구성 파일을 편집한 후에는 변경 사항을 확인하라는 메시지가 나타납니다. 파일에 변경 사항을 저장하려면 Y
를 누르고, 변경 사항을 폐기하려면 N
을 누릅니다.
가상 호스트 파일 내에서 이 요청을 처리해야 하는 도메인 이름 또는 IP 주소를 지정하는 ServerName
지시문을 추가할 수 있습니다. 이는 가상 호스트에 특수성을 추가하여 ServerName
값과 일치하는 경우 기본 정의를 무시하도록 허용하는 옵션입니다.
다음 명령을 실행하여 가상 호스트 파일을 엽니다. 이때 your_domain
변수를 실제 도메인 이름으로 교체하세요:
your_domain
을 ServerName
지시문에 추가하십시오:
…
ServerName your_domain
…
마찬가지로 ServerAlias
지시문을 사용하여 가상 호스트가 하나 이상의 이름에 적용되도록 할 수 있습니다. 이는 동일한 콘텐츠에 도달하는 대체 경로를 제공합니다. 이를 위한 좋은 사용 사례는 동일한 도메인에 www
가 선행된 것을 추가하는 것입니다:
…
ServerAlias www.your_domain.com
…
DocumentRoot
지시문은 이 가상 호스트에 대해 요청된 콘텐츠가 위치할 위치를 지정합니다. Ubuntu에서는 기본 가상 호스트가 /var/www/
디렉토리에서 콘텐츠를 제공하도록 설정되어 있습니다:
…
DocumentRoot /var/www/your_domain/public_html
…
디렉토리 정의
가상 호스트 정의 내에서 파일 시스템 내의 다른 디렉토리를 서버가 어떻게 처리할지에 대한 정의가 있습니다. Apache는 이러한 방향을 가장 짧은 것부터 가장 긴 것까지 순서대로 적용하므로 이전 옵션을 재정의할 기회가 다시 있습니다.
다음 명령을 사용하여 apache2.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>
…
첫 번째 디렉토리 정의는 /
또는 루트 디렉토리에 대한 규칙을 적용합니다. 이것은 파일 시스템에서 제공되는 모든 파일에 적용되므로 가상 호스트의 기본 구성을 제공합니다. 이 파일에 포함된 디렉토리 구성 옵션과 유용한 주석을 확인하십시오. 이 기본 구성은 하위 디렉토리 정의에서 명시적으로 다르게 지정되지 않는 한 모든 콘텐츠에 대한 액세스를 거부합니다.
Require
지시문은 서버 내의 다른 리소스에 대한 액세스를 제한하거나 열 수 있습니다.
AllowOverride
지시문은 콘텐츠 디렉토리에 배치된 경우 .htaccess
파일이 설정을 무시할 수 있는지 여부를 결정하는 데 사용됩니다. 기본적으로 이는 허용되지 않지만 다양한 상황에서 활성화하는 것이 유용할 수 있습니다.
이 파일의 내용을 검토한 후에는 CTRL+X
를 눌러 닫을 수 있습니다.
Alias 및 ScriptAlias 문
디렉토리 정의는 때로 Alias
또는 ScriptAlias
지시문으로 시작됩니다.
이 명령을 사용하여 가상 호스트 구성 파일을 열고 your_domain
변수를 도메인 이름으로 바꿉니다:
Alias
지시문은 URL 경로를 디렉토리 경로에 매핑합니다. 예를 들어, your_domain
의 요청을 처리하는 가상 호스트에서 다음은 your_domain.com/content/
으로 이동할 때 /usr/local/apache/content/
내의 콘텐츠에 액세스를 허용합니다:
Alias “/content/” “/usr/local/apache/content/”
ScriptAlias
지시문은 동일한 방식으로 작동하지만 실행 가능한 구성 요소가 있는 디렉토리를 정의하는 데 사용됩니다:
ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
이전 섹션에서 논의한 대로 액세스 권한이 있는 디렉토리를 정의하는 것을 기억하세요. 파일을 편집한 후에는 CTRL+X
를 눌러 파일을 종료하세요. 이 파일에 변경 사항을 가했다면, 파일에 변경 사항을 저장하려면 Y
를 누르거나 구성 변경 전의 파일로 돌아가려면 N
을 누르세요.
단계 5: 사이트 및 모듈 활성화
요구 사항을 충족하는 가상 호스트 파일이 있으면 Apache와 함께 제공되는 도구를 사용하여 실제 웹 사이트로 전환할 수 있습니다.
기존의 sites-available
디렉토리에 있는 파일에 대한 sites-enabled
디렉토리에 심볼릭 링크를 생성하려면 다음 명령을 사용하세요. 자신의 가상 호스트 사이트 구성 파일 이름으로 your_domain
을(를) 대체해야 합니다:
사이트를 활성화한 후에는 Apache에게 구성 파일을 다시로드하도록 다음 명령을 사용하여 변경 사항을 전파하도록 지시하세요:
가상 호스트를 비활성화하는 데 사용되는 동반 명령도 있습니다. 이 명령은 sites-enabled
디렉토리에서 심볼릭 링크를 제거함으로써 작동합니다. 예를 들어 가상 호스트 사이트를 활성화한 경우 기본 000-default
사이트를 비활성화할 수 있습니다:
모듈은 각각 a2enmod
및 a2dismod
명령을 사용하여 활성화 또는 비활성화할 수 있습니다. 이 명령들은 각각 a2ensite
및 a2dissite
버전의 명령과 동일하게 작동합니다. 예를 들어, info
모듈을 활성화하려면 다음 명령을 사용할 수 있습니다:
비슷하게, 모듈을 비활성화하려면 a2dismod
명령을 사용할 수 있습니다:
구성 파일을 수정하고 모듈을 활성화 또는 비활성화한 후에는 Apache를 다시 시작해야 합니다.
결론
Apache는 다양하고 매우 모듈화되어 있으므로 설정 요구 사항은 설정에 따라 다릅니다.
위의 몇 가지 일반적인 사용 사례를 검토한 후에는 주요 구성 파일이 어떤 용도로 사용되는지와 서로 어떻게 상호 작용하는지에 대해 잘 이해하게 될 것입니다. 특정 구성 옵션에 대해 알아야 할 경우, 제공된 파일에는 주석이 잘 달려 있으며 Apache는 훌륭한 문서를 제공합니다. 이제 구성 파일이 덜 혼란스럽지 않고 귀하의 요구에 맞게 실험하고 수정하는 데 더욱 편안해질 것입니다.