.htaccess AWS Cloudfront +负载平衡器,url从主域更改为负载平衡器子域[已关闭]

7d7tgy0s  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(200)

**已关闭。**此问题为not about programming or software development。目前不接受答案。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site相关,您可以留下评论,说明在何处可以找到此问题的答案。
上个月关门了。
机构群体已于上月审核了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我的设置如下:
1.用户example.com在浏览器上键入www.example.com
1.请求发送到AWS CloudFront,后者将HTTP重定向到HTTPS,并将请求转发到AWS Elastic LoadBalancer(elb.example.com)

  1. LoadBalancer将请求转发到运行PHPLaravel框架的EC2示例
  2. EC2响应正常
    1.用户在www.example.com正确地查看页面example.com,其他一切对他来说都是透明的
    所有这一切都是我想要的,然而......
  • 如果用户导航到页面上的任何按钮,浏览器上的URL将变成elb.example.com(它应该保持为example.com)
  • 如果我去查看页面源代码,页面上任何按钮的所有链接都有elb.example.com的基本url(应该是example.com)

这是因为EC2看到来自负载平衡器的请求,所以它假设基本url是elb.example.com,并相应地生成所有链接。
如何使EC2将基本URL视为example.com?

8e2ybdfx

8e2ybdfx1#

此行为可能是由于默认情况下CloudFront将Host: HTTP请求头设置为原始主机名(在本例中为elb. example. com)。然后,应用程序可能会基于该主机名生成链接。
相反,如果您将CloudFront配置为将该标头列入白名单以转发到源,则浏览器发送的Host标头(example.com)的值将由CloudFront发送到应用程序,因此应用程序的行为应该更像您所期望的那样,并在生成链接时使用该值。CloudFront仍然使用源域名执行所需的DNS查找,以便建立到源的TCP连接(本例中为ELB),但停止将该主机名插入HTTP请求头。
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders
您可以在缓存行为设置-〉基于所选请求头的缓存-〉白名单下找到主机头。

2eafrhcq

2eafrhcq2#

与此同时,在AWS方面,与最初的答案相比,情况发生了一些变化。因为它的核心仍然是正确的。(将主机头添加到白名单中。)现在,您需要将其配置为自定义Cloudfront策略。您需要在Cloudfront AWS控制台中创建此策略。
创建自定义策略后,您可以使用发行版的“行为”选项卡配置此新创建的策略。这可以通过将“缓存策略”更改为新创建的策略来完成。

相关问题