#
ドキュメント

Document

自分のための備忘録です。

Host ヘッダー

Host ヘッダーと Web サーバーのバーチャルホスト( Virtual Host )ついて記載する。

本記事では Web サーバとして Apache を想定する。
また名前ベースのバーチャルホストの使用を想定する。

Apache 設定ファイル

名前ベースのバーチャルホストは Host ヘッダと一致する ServerName ディレクティブを持つ設定ファイルが適用される。
example.com と example.org を同一サーバーでホストしており IP が同じ 204.11.11.111 とする。

  • http://example.com ( Host ヘッダ:example.com )のリクエストは ServerName ディレクティブの値が example.com の設定ファイルが適用される
  • http://example.org ( Host ヘッダ:example.org )のリクエストは ServerName ディレクティブの値がが example.org の設定ファイルが適用される

Host ヘッダーと一致する ServerName ディレクティブを持つ設定ファイルがなければ、(あれば)デフォルト( 000-default.conf )の設定ファイルが適用される。
設定ファイルが 1 つのみであればそのファイルが適用される。

Apache アクセスログで Host ヘッダー

デフォルトの 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 )