AWS Cloudfront +负载均衡器,url从主域更改为负载均衡子域

我的设置如下:

  1. 用户在浏览器上inputexample.com
  2. 请求转到AWS CloudFront,它将HTTPredirect到HTTPS,并将请求转发到AWS Elastic LoadBalancer(elb.example.com)
  3. LoadBalancer将请求转发到运行PHP Laravel框架的EC2实例
  4. EC2正常响应
  5. 用户可以在example.com上正确地查看页面,其他所有内容对他都是透明的

所有这一切都是我想要的,不过…..

  • 如果用户导航到页面上的任何button,浏览器上的url将变成elb.example.com(它应该停留在example.com)
  • 如果我去查看网页源代码,页面上任何button的所有链接都有elb.example.com的基本url(它应该是example.com)

原因是因为EC2看到来自负载平衡器的请求,所以它假定基本url是elb.example.com并相应地生成所有链接。

如何使EC2看到基地url为example.com?

此行为可能是由于默认情况下,CloudFront将Host:HTTP请求标头设置为原始主机名,在本例中为elb.example.com。 那么应用程序可能会根据该主机名生成链接。

如果将CloudFrontconfiguration为将该标题列入白名单以便转发到源,则由浏览器(example.com)发送的主机标头将由CloudFront发送到应用程序,因此应用程序的行为应该更像您期望的并在生成链接时使用该值。 由此,CloudFront仍然使用原始服务器主机名执行DNS查找,以便build立到源(本例中为ELB)的TCP连接,但是停止将该主机名注入到HTTP请求标头中。

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

这已经被@ michael-sqlbot回答了