Apache2の全体像
Apache HTTP Server は、受信した HTTP リクエストに対して、VirtualHost、URL、ファイルパス、モジュールの設定を適用して応答を返す Web サーバーである。
Apache HTTP Serverとapache2
Section titled “Apache HTTP Serverとapache2”製品名は Apache HTTP Server である。Debian 系では、パッケージ名、サービス名、設定ディレクトリに apache2 という名前を使う。
| 対象 | Debianでの名前 |
|---|---|
| パッケージ | apache2 |
| systemd unit | apache2.service |
| 設定ディレクトリ | /etc/apache2 |
| 実行中設定の確認 | apache2ctl |
httpd という名前は、Apache HTTP Server 本体や他のディストリビューションのサービス名を指すことがある。Debian の操作では apache2 と apache2ctl を使う。
プロセスの構成
Section titled “プロセスの構成”Apache は、親プロセスと複数の子プロセスまたはスレッドでリクエストを処理する。
親プロセスは root 権限で起動し、80番や443番ポートの待ち受け、設定の読み込み、子プロセスの管理を行う。通常のリクエスト処理は、権限を落とした子プロセスやスレッドが担当する。
子プロセスやスレッドの使い方は MPM(Multi-Processing Module)によって変わる。MPM は同時接続の処理方法を決め、event、worker、prefork などがあるが、同時に有効にできる MPM は1つである。有効な MPM は、apache2ctl -Mが表示するmpm_*_moduleで確認できる。
リクエスト処理の流れ
Section titled “リクエスト処理の流れ”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 -> responseHTTPS では、HTTP リクエストを処理する前に TLS 接続を確立する。TLS 接続後のリクエスト処理は、HTTP と同じように VirtualHost や設定セクションへ進む。
Debianの設定ファイル
Section titled “Debianの設定ファイル”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とmods-enabled
Section titled “mods-availableとmods-enabled”mods-available には利用可能なモジュールの設定が置かれる。a2enmodはmods-enabledにシンボリックリンクを作り、a2dismodはそのリンクを取り除く。Apacheはmods-enabledから参照される設定を次回の設定読み込み時に使用する。
conf-availableとconf-enabled
Section titled “conf-availableとconf-enabled”VirtualHost に限定されない補助設定を置く。a2enconfとa2disconfが、conf-enabledのシンボリックリンクを管理する。
sites-availableとsites-enabled
Section titled “sites-availableとsites-enabled”sites-availableにVirtualHostの設定を置く。a2ensiteはsites-enabledにシンボリックリンクを作り、a2dissiteはそのリンクを取り除く。設定ファイル本体を変換するのではなく、次回の設定読み込み対象を切り替える。
Apache の機能はモジュールとして分割されている。設定ディレクティブを使うには、そのディレクティブを提供するモジュールが読み込まれている必要がある。
有効なモジュールはapache2ctl -Mで確認できる。たとえば、SSLEngineはmod_ssl、AuthBasicProviderはmod_auth_basic、RewriteRuleはmod_rewriteが提供する。構文エラーでInvalid commandと表示された場合は、スペルだけでなく必要なモジュールが有効か確認する。
設定の検証と再読み込み
Section titled “設定の検証と再読み込み”apache2ctl configtestは、Apacheを再読み込みする前に設定ファイルの構文と、参照する証明書や秘密鍵などを検査する。成功時はSyntax OKと表示される。
systemctl reload apache2は、動作中のApacheへ設定を再読み込みさせる。既存接続への影響を抑えて設定を反映できる。Apacheが起動していない場合や、プロセス自体を作り直す必要がある場合はrestartを使う。
-
Apache HTTP Server Configuration Files 設定ファイル、ディレクティブ、モジュールの読み込み。
-
Multi-Processing Modules MPM とプロセス・スレッドモデル。
-
Debian apache2 README Debian 固有の Apache2 設定構成。