コンテンツにスキップ

Apache2の全体像

Apache HTTP Server は、受信した HTTP リクエストに対して、VirtualHost、URL、ファイルパス、モジュールの設定を適用して応答を返す Web サーバーである。


製品名は Apache HTTP Server である。Debian 系では、パッケージ名、サービス名、設定ディレクトリに apache2 という名前を使う。

対象 Debianでの名前
パッケージ apache2
systemd unit apache2.service
設定ディレクトリ /etc/apache2
実行中設定の確認 apache2ctl

httpd という名前は、Apache HTTP Server 本体や他のディストリビューションのサービス名を指すことがある。Debian の操作では apache2 と apache2ctl を使う。


Apache は、親プロセスと複数の子プロセスまたはスレッドでリクエストを処理する。

親プロセスは root 権限で起動し、80番や443番ポートの待ち受け、設定の読み込み、子プロセスの管理を行う。通常のリクエスト処理は、権限を落とした子プロセスやスレッドが担当する。

子プロセスやスレッドの使い方は MPM(Multi-Processing Module)によって変わる。MPM は同時接続の処理方法を決め、event、worker、prefork などがあるが、同時に有効にできる MPM は1つである。有効な MPM は、apache2ctl -Mが表示するmpm_*_moduleで確認できる。


TCP connection
-> port 80 or 443
-> IP address and port select candidate VirtualHosts
-> Host header selects VirtualHost
-> URL is mapped to content
-> matching configuration sections are applied
-> authentication and authorization
-> response

HTTPS では、HTTP リクエストを処理する前に TLS 接続を確立する。TLS 接続後のリクエスト処理は、HTTP と同じように VirtualHost や設定セクションへ進む。


Apache の起点となる設定ファイルは /etc/apache2/apache2.conf である。このファイルから、モジュール、ポート、補助設定、VirtualHost の設定が読み込まれる。

/etc/apache2/
├─ apache2.conf
├─ ports.conf
├─ envvars
├─ mods-available/
├─ mods-enabled/
├─ conf-available/
├─ conf-enabled/
├─ sites-available/
└─ sites-enabled/

mods-available には利用可能なモジュールの設定が置かれる。a2enmodはmods-enabledにシンボリックリンクを作り、a2dismodはそのリンクを取り除く。Apacheはmods-enabledから参照される設定を次回の設定読み込み時に使用する。

VirtualHost に限定されない補助設定を置く。a2enconfとa2disconfが、conf-enabledのシンボリックリンクを管理する。

sites-availableにVirtualHostの設定を置く。a2ensiteはsites-enabledにシンボリックリンクを作り、a2dissiteはそのリンクを取り除く。設定ファイル本体を変換するのではなく、次回の設定読み込み対象を切り替える。


Apache の機能はモジュールとして分割されている。設定ディレクティブを使うには、そのディレクティブを提供するモジュールが読み込まれている必要がある。

有効なモジュールはapache2ctl -Mで確認できる。たとえば、SSLEngineはmod_ssl、AuthBasicProviderはmod_auth_basic、RewriteRuleはmod_rewriteが提供する。構文エラーでInvalid commandと表示された場合は、スペルだけでなく必要なモジュールが有効か確認する。


apache2ctl configtestは、Apacheを再読み込みする前に設定ファイルの構文と、参照する証明書や秘密鍵などを検査する。成功時はSyntax OKと表示される。

systemctl reload apache2は、動作中のApacheへ設定を再読み込みさせる。既存接続への影響を抑えて設定を反映できる。Apacheが起動していない場合や、プロセス自体を作り直す必要がある場合はrestartを使う。