要望や症状
EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利用している環境において、以下の問題が発生します。
独自ドメインでのアクセスは正常に動作しますが、EC-CUBEが生成するaタグのhref属性のドメイン部分が、設定した独自ドメインではなくEC2のパブリックDNS名に置き換わってしまいます。この現象により、ページ内のリンクをクリックした際に意図しないドメインへ遷移してしまう問題が生じます。
理由や原因
この問題は、CloudFrontからオリジンサーバー(EC2)へのリクエスト転送時に、Hostヘッダーが適切に転送されていないことが根本的な原因です。
EC-CUBEはURL生成の際にHTTPリクエストヘッダーのHostを参照して、リンクやフォームのaction属性などに使用するドメイン名を決定します。CloudFrontのデフォルト設定では、オリジンリクエスト時にHostヘッダーを転送しない設定になっているため、EC2のパブリックDNS名がHostとして認識され、それがリンク生成時に使用されてしまいます。
解決策
この問題を解決するには、CloudFrontの設定でオリジンリクエスト時にHostヘッダーを適切に転送するよう変更する必要があります。
CloudFrontの設定変更手順
- AWS管理コンソールにログインし、CloudFrontサービスにアクセスします
- 対象のディストリビューションを選択します
- 「Behaviors」タブをクリックします
- 編集対象のビヘイビアを選択し、編集ボタンをクリックします
- 「Cache key and origin requests」セクションで以下の設定を行います:
- キャッシュキーのヘッダー設定に「Host」を追加
- オリジンリクエストのヘッダー設定に「Host」を追加
- 設定内容を確認し、保存ボタンをクリックします
設定反映の確認方法
設定変更後、CloudFrontのエッジキャッシュが更新されるまでに時間がかかる場合があります。すぐに動作確認を行いたい場合は、CloudFrontの管理画面から「Invalidations」機能を使用してキャッシュの無効化を実行してください。
補足事項
X-Forwarded-Hostヘッダーを利用した代替手段も存在しますが、標準的なHTTP仕様に従ったHostヘッダーの転送設定を行うことを推奨します。この方法により、EC-CUBEが期待通りのドメイン名でURLを生成できるようになります。