web-dev-qa-db-ja.com

AWS Cloudfront +ロードバランサー、メインドメインからロードバランサーサブドメインへのURLの変更

私のセットアップは次のとおりです:

  1. ユーザーがブラウザでexample.comと入力する
  2. リクエストがAWS CloudFrontに送信され、HTTPがHTTPSにリダイレクトされ、リクエストがAWS Elastic LoadBalancer(elb.example.com)に転送されます
  3. LoadBalancerは、実行中のEC2インスタンスにリクエストを転送しますPHP Laravel framework
  4. EC2は正常に応答します
  5. ユーザーはexample.comでページを正しく表示し、それ以外はすべて透過的です

これがすべて私が望むものです、しかし....

  • ユーザーがページのいずれかのボタンに移動すると、ブラウザーのURLはelb.example.comになります(example.comのままにする必要があります)
  • ページのソースを表示する場合、ページ上のボタンへのすべてのリンクには、elb.example.comのベースURLがあります(example.comである必要があります)。

その理由は、EC2がロードバランサーからのリクエストを確認するため、ベースURLがelb.example.comであると想定し、それに応じてすべてのリンクを生成するためです。

EC2にベースURLをexample.comとして表示させるにはどうすればよいですか?

6
Dv_MH

この動作は、CloudFrontがデフォルトでHost:HTTPリクエストヘッダーをオリジンホスト名に設定するという事実(この場合はelb.example.com)に起因する可能性があります。次に、アプリケーションはそのホスト名に基づいてリンクを生成すると考えられます。

その代わりに、オリジンに転送するためにそのヘッダーをホワイトリストに登録するようにCloudFrontを構成すると、ブラウザー(example.com)によって送信されたホストヘッダーがCloudFrontによってアプリケーションに送信されるため、アプリケーションは期待どおりに動作するはずです。リンクを生成するときにその値を使用します。これにより、CloudFrontは引き続きオリジンサーバーのホスト名を使用して、TCPオリジンへの接続(この場合はELB))を確立するために必要なDNSルックアップを実行しますが、そのホスト名をHTTPリクエストヘッダー。

http://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders

これは@ michael-sqlbot on SO によって回答されています

7
Dv_MH