簡體   English   中英

AWS Cloudfront + 負載均衡器,url 從主域更改為負載均衡器子域

[英]AWS Cloudfront + Load Balancer, url changes from main domain to load balancer subdomain

我的設置如下:

  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 的基本網址(應該是 example.com)

原因是因為 EC2 看到來自負載均衡器的請求,因此它假定基本 url 是 elb.example.com 並相應地生成所有鏈接。

如何讓 EC2 將基本 url 視為 example.com ?

這種行為可能是因為默認情況下 CloudFront 將Host: HTTP 請求標頭設置為源主機名,在本例中為 elb.example.com。 然后,應用程序可能會根據該主機名生成鏈接。

相反,如果您將 CloudFront 配置為將該標頭列入白名單以轉發到源,則瀏覽器 (example.com) 發送的 Host 標頭將由 CloudFront 發送到應用程序,因此應用程序的行為應該更像您期望的並在生成鏈接時使用該值。 這樣,CloudFront 仍然使用源域名進行 DNS 查找,以便建立到源(在本例中為 ELB)的 TCP 連接,但停止將該主機名注入 HTTP 請求標頭中。

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

您將在緩存行為設置 -> 基於所選請求標頭的緩存 -> 白名單下找到主機標頭。

與此同時,事情與最初的答案相比發生了一些變化(在 AWS 方面)。 因為它的核心仍然是正確的。 (將主機標頭添加到白名單。)現在您需要將其配置為自定義 Cloudfront 策略。 您需要在 Cloudfront AWS 控制台中創建此策略。

創建自定義策略后,您可以使用分配的“行為”選項卡配置這個新創建的策略。 這可以通過將“緩存策略”更改為您新創建的策略來完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM