
我正在嘗試快取 EC2 上的一個網站,它有一個 URL uncached.xyz.com
,因此我創建了一個指向原點的 Cloud Front uncached.xyz.com
,並創建了一條指向 cloudfront 發行版的記錄xyz.com
,名稱類似d111111abcdef8.cloudfront.net
,
但是伺服器傳回的所有資訊(例如按鈕 url)都不是相對的,並且包含請求 URL,這意味著如果 Cloudfront 使用 存取來源uncached.xyz.com
,則 CDN(對於使用的任何 cname)傳回的內容將包含 Origin url 而不是用於存取CloudFront 發行版的url,看起來像是 <a href="uncached.xyz.com/info"><a>
它應該在的位置<a href="xyz.com/info"><a>
。
TL:博士
CloudFront 應該會回傳:(
<a href="xyz.com/info"><a>
這是指向 CDN 分發(快取的網站)的存取 url),
但它會傳回:(
<a href="uncached.xyz.com/info"><a>
這是包含要快取的資料(網站)的原始 URL)
有沒有辦法「欺騙」來源伺服器,認為用於存取它的 url 是 CloudFront 發行版而不是配置的來源 URL?
我正在使用的更簡單的版本。
答案1
有幾種方法可以做到這一點:
在 Cloudfront 設定中設定標頭 X-Forwarded-Host 和 X-Forwarded-Proto 以使來源請求將所需資訊傳遞到後端應用程式。在後端使用標題(如果存在)來產生頁面內的內容。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
另一種方法可能是設定一個 lambda@edge 來處理原始回應,並在需要時替換內容。