Host ヘッダーと Web サーバーのバーチャルホスト( Virtual Host )ついて記載する。
本記事では Web サーバとして Apache を想定する。
また名前ベースのバーチャルホストの使用を想定する。
名前ベースのバーチャルホストは Host ヘッダと一致する ServerName ディレクティブを持つ設定ファイルが適用される。
example.com と example.org を同一サーバーでホストしており IP が同じ 204.11.11.111 とする。
Host ヘッダーと一致する ServerName ディレクティブを持つ設定ファイルがなければ、(あれば)デフォルト( 000-default.conf )の設定ファイルが適用される。
設定ファイルが 1 つのみであればそのファイルが適用される。
デフォルトの LogFormat は Host ヘッダーを記録しない。
以下のように変更することで Host ヘッダーが記録される。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\"" combinedhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combinedhost
$ curl -I -H 'Host:example.com' 204.11.11.11 # Apache アクセスログの Host に example.com が記録
$ curl -I -H 'Host:example.org' 204.11.11.11 # Apache アクセスログの Host に example.org が記録
# URL と異なる Host を送信
$ curl -I -H 'Host example.org' http://example.com # Apache アクセスログの Host に example.org が記録
# 421 Misdirected Request になる
※ curl I オプション:「Fetch the headers only!」( man curl )