Amazon CloudFront ディストリビューションで設定したオリジンは、仮想ホスティングを使用しています。このディストリビューションにおいて、ホストヘッダーをオリジンサーバーに転送する設定を行いたいです。
簡単な説明
ホストヘッダーをオリジンに転送するようにディストリビューションを設定するには、次のいずれかの操作を行います:
- キャッシュポリシーとオリジンリクエストポリシーを作成してください。
- ディストリビューション内の既存の動作設定を編集します。
カスタムドメインを使用せずに Amazon API Gateway のカスタムポリシーを作成する場合は、ホストヘッダーを転送しないでください。転送した場合、"403 error" が発生します。
**重要:**Amazon Simple Storage Service (Amazon S3) オリジンでは、CloudFront はホストヘッダーに基づくキャッシュをサポートしません。詳細については、「キャッシュの基盤となるヘッダーを選択する」を参照してください。
解決策
キャッシュポリシーとオリジンリクエストポリシーを作成する
次の手順を実行します。
- CloudFront コンソールを開きます。
- ナビゲーションペインで [ポリシー] を選択します。
- [カスタムポリシー] セクションで [キャッシュポリシーの作成] を選択します。
- [キャッシュキー設定] の [ヘッダー] で [次のヘッダーを含める] を選択します。
- [ヘッダーを追加] ドロップダウンリストから [ホスト] を選択します。
- 要件に応じて、その他のキャッシュポリシー設定を完了します。
- [作成] を選択します。
- ポリシーを CloudFront ディストリビューション内の関連する動作にアタッチします。
ディストリビューション内の既存動作の設定を編集します。
次の手順を実行します。
- CloudFront コンソールを開きます。
- 目的のディストリビューションを選択します。
- [動作] タブを選択し、ホストヘッダーの転送先となるパスを選択します。
- [編集] を選択します。
- [キャッシュキーとオリジンリクエスト] が [レガシーキャッシュ設定] に設定されていることを確認します。
注: [レガシーキャッシュ設定] が選択されていない場合は、前のセクションの手順を実行してキャッシュポリシーを作成します。
- [レガシーキャッシュ設定] の [ヘッダー] で [次のヘッダーを含める] を選択します。
- [ヘッダーの追加] メニューから [ホスト] を選択します。
- [変更を保存] を選択します。
(オプション) ヘッダーを別の名前で転送する
ホストヘッダー値をカスタムまたは別のヘッダー名で転送する場合は、CloudFront 関数または AWS Lambda@Edge 関数を使用します。
ヘッダーを別の名前で転送するには、次の手順を実行します。
- 受信ホストヘッダーを確認します。
注: CloudFront 関数を使用する場合は、ビューワーリクエストイベントを確認します。Lambda@Edge を使用する場合は、ビューまたはオリジンリクエストイベントを確認します。
- クライアントリクエストのホストヘッダー値をヘッダーに保存するには、ビューアーリクエストで Lambda の関数ハンドラーコマンドを使用します。
注: たとえば、受信ホストヘッダーが host の場合は、同じ値を持つヘッダーを新たに追加します。次のコード例を参照してください。
function handler(event) { const request = event.request;
const headers = request.headers;
const host = request.headers.host.value;
headers['x-forwarded-host'] = { "value": host }
return request
}
注: この関数例では、ビューワーリクエストイベントが有効化されます。
- カスタムヘッダーをオリジンに転送するには、キャッシュまたはホストのリクエストポリシーで設定を行い、X-Forwarded-Host ヘッダーを許可リストに追加します。詳細については、「カスタムオリジンでのリクエストと応答の動作」を参照してください。
関連情報
リクエストヘッダーに基づきコンテンツをキャッシュする
ポリシーでキャッシュキーを制御する