CloudFront と オリジンに発行される HTTP リクエストの Host ヘッダーについて記載します。

構成

カスタムドメイン

ドメイン
example.com

オリジン

オリジン オリジンドメイン
オリジン1 origin1.example.com
オリジン2 origin2.example.com

ビヘイビア

パスパターン オリジン
https://example.com origin1.example.com
https://example.com/blog origin2.example.com

Apache

Name ベースの VirtualHost を設定している。 設定ファイルは以下 ServerName ディレクティブを指定したファイルのみとして進める。

オリジン ServerName ディレクティブ
origin1.example.com origin1.example.com
origin2.example.com origin2.example.com

表示テスト

オリジンリクエストポリシー

  • ビューワーリクエスト:https://example.com/blog/index.html
オリジンリクエストポリシー 表示 Apache アクセスログの Host ヘッダー
AllViewer example.com
AllViewerExceptHostHeader origin2.example.com

アクセスログに HOST ヘッダー を記録

HTTP リクエストの Host ヘッダーを記録するように Apache のアクセスログのフォーマットを変更する。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\"" combinedhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combinedhost

表示の仕組み

ビューワーが https://example.com/blog/index.html に HTTP リクエストをした表示フロー。

  • ビヘイビアのオリジンリクエストポリシーが AllViewer の場合
    • CloudFront からオリジンの HTTP リクエストの Host ヘッダーには、ビューワーが発行する example.com が使用される
    • ↑より Apache で VirtualHost を使用している場合は ServerName ディレクティブが example.com の設定ファイルが使用される
    • ServerName が example.com の設定ファイルがなければ、デフォルトの設定ファイル( 000-default.conf )が使用される
    • 設定ファイルが1つしかない場合はその設定ファイルが使用される
  • ビヘイビアのオリジンリクエストポリシーが AllViewerExceptHostHeader の場合
    • CloudFront からオリジンの HTTP リクエストの Host ヘッダーは origin2.example.com が使用される
    • ↑より Apache で VirtualHost を使用している場合は ServerName ディレクティブが orgin2.example.com の設定ファイルが使用される
    • ServerName が origin2.example.com の設定ファイルがなければ、デフォルトの設定ファイル( 000-default.conf )が使用される
    • 設定ファイルが1つしかない場合はその設定ファイルが使用される

Host ヘッダー

HTTP 1.1 ではHostヘッダーは必須になるが、HTTP/2では代わりに疑似ヘッダーである:authorityにホスト名とポート番号が値として入る。

ref. ウェブの基礎 ヘッダーについて改めて調べてみた