Domain-Name-System

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

  • January 4, 2018

我的設置如下:

  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 ?

此行為可能是由於預設情況下 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

這已由@michael-sqlbot在 SO 上回答

引用自:https://serverfault.com/questions/788807