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

Dv_*_*_MH 5 php .htaccess amazon-ec2 amazon-web-services amazon-cloudfront

我的设置如下:

  1. 用户在浏览器上键入example.com
  2. 请求转到AWS CloudFront,后者将HTTP重定向到HTTPS,并将请求转发到AWS Elastic LoadBalancer(elb.example.com)
  3. LoadBalancer将请求转发到运行PHP Laravel框架的EC2实例
  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?

Mic*_*bot 14

此行为可能是由于默认情况下CloudFront将Host:HTTP请求标头设置为源主机名,在本例中为elb.example.com.然后,应用程序可能会生成基于该主机名的链接.

相反,如果您将CloudFront配置为将该标头列入白名单以转发到源,则浏览器(example.com)发送的主机标头将由CloudFront发送到应用程序,因此应用程序的行为应该更像您期望的并在生成链接时使用该值.有了这个,CloudFront仍然使用原始域名进行所需的DNS查找,以便建立到源的TCP连接(在本例中为ELB),但是停止将该主机名注入HTTP请求头.

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

您将在缓存行为设置 - >基于所选请求标头的缓存 - >白名单下找到主机标头.


Rut*_*ger 5

与此同时,事情与最初的答案相比发生了一些变化(在 AWS 方面)。因为它的核心仍然是正确的。(将主机标头添加到白名单中。)现在您需要将其配置为自定义 Cloudfront 策略。您需要在 Cloudfront AWS 控制台中创建此策略。

创建自定义策略后,您可以使用发行版的“行为”选项卡配置这个新创建的策略。这可以通过将“缓存策略”更改为新创建的策略来完成。