AWS Cloudfront + 负载均衡器,url 从主域更改为负载均衡器子域
AWS Cloudfront + Load Balancer, url changes from main domain to load balancer subdomain
我的设置如下:
- 用户在浏览器上输入 example.com
- 请求转到 AWS CloudFront,它将 HTTP 重定向到 HTTPS,并将请求转发到 AWS Elastic LoadBalancer (elb.example.com)
- LoadBalancer 将请求转发给 EC2 实例 运行 PHP Laravel framework
- EC2 正常响应
- 用户在 example.com 正确查看页面,其他所有内容对他来说都是透明的
这一切都是我想要的,然而.....
- 如果用户导航到页面上的任何按钮,浏览器上的 url 将变为 elb。example.com(它应该保持 example.com)
- 如果我去查看页面源代码,页面上任何按钮的所有链接都有elb的基础url。example.com(应该是example.com)
原因是因为 EC2 看到来自负载均衡器的请求,所以它假定基础 url 是 elb。example.com 并相应地生成所有链接。
如何让 EC2 将基数 url 视为 example.com?
此行为可能是由于默认情况下 CloudFront 将 Host:
HTTP 请求 header 设置为原始主机名,在本例中为 elb.example.com。然后应用程序可能会根据该主机名生成链接。
相反,如果您将 CloudFront 配置为将 header 转发到源的白名单,则浏览器 (example.com) 发送的主机 header 将被发送到CloudFront 的应用程序,因此该应用程序的行为应该更像您期望的那样,并在生成链接时使用该值。有了这个,CloudFront 仍然使用源域名进行所需的 DNS 查找,以便建立与源(在本例中为 ELB)的 TCP 连接,但停止将该主机名注入 HTTP 请求 headers。
您将在缓存行为设置下找到主机 header -> 基于所选请求的缓存 headers -> 白名单。
与此同时,原始答案(在 AWS 方面)发生了一些变化。因为它的核心仍然是正确的。 (将主机 header 添加到白名单。)现在您需要将其配置为自定义 Cloudfront 策略。您需要在 Cloudfront AWS 控制台中创建此策略。
创建自定义策略后,您可以使用分配的 'behaviours' 选项卡配置这个新创建的策略。这可以通过将 'cache policy' 更改为您新创建的策略来完成。
我的设置如下:
- 用户在浏览器上输入 example.com
- 请求转到 AWS CloudFront,它将 HTTP 重定向到 HTTPS,并将请求转发到 AWS Elastic LoadBalancer (elb.example.com)
- LoadBalancer 将请求转发给 EC2 实例 运行 PHP Laravel framework
- EC2 正常响应
- 用户在 example.com 正确查看页面,其他所有内容对他来说都是透明的
这一切都是我想要的,然而.....
- 如果用户导航到页面上的任何按钮,浏览器上的 url 将变为 elb。example.com(它应该保持 example.com)
- 如果我去查看页面源代码,页面上任何按钮的所有链接都有elb的基础url。example.com(应该是example.com)
原因是因为 EC2 看到来自负载均衡器的请求,所以它假定基础 url 是 elb。example.com 并相应地生成所有链接。
如何让 EC2 将基数 url 视为 example.com?
此行为可能是由于默认情况下 CloudFront 将 Host:
HTTP 请求 header 设置为原始主机名,在本例中为 elb.example.com。然后应用程序可能会根据该主机名生成链接。
相反,如果您将 CloudFront 配置为将 header 转发到源的白名单,则浏览器 (example.com) 发送的主机 header 将被发送到CloudFront 的应用程序,因此该应用程序的行为应该更像您期望的那样,并在生成链接时使用该值。有了这个,CloudFront 仍然使用源域名进行所需的 DNS 查找,以便建立与源(在本例中为 ELB)的 TCP 连接,但停止将该主机名注入 HTTP 请求 headers。
您将在缓存行为设置下找到主机 header -> 基于所选请求的缓存 headers -> 白名单。
与此同时,原始答案(在 AWS 方面)发生了一些变化。因为它的核心仍然是正确的。 (将主机 header 添加到白名单。)现在您需要将其配置为自定义 Cloudfront 策略。您需要在 Cloudfront AWS 控制台中创建此策略。
创建自定义策略后,您可以使用分配的 'behaviours' 选项卡配置这个新创建的策略。这可以通过将 'cache policy' 更改为您新创建的策略来完成。