我正在尝试缓存 EC2 上的一个网站,它有一个 URL uncached.xyz.com
,因此我创建了一个指向原点的 Cloud Front ,并创建了一条指向 cloudfront 分布的uncached.xyz.com
记录,命名为,xyz.com
d111111abcdef8.cloudfront.net
但是服务器返回的所有信息(例如按钮 URL)都不是相对的,并且包含请求 URL,这意味着如果 Cloudfront 使用 访问原点uncached.xyz.com
,则 CDN 返回的内容(对于使用的任何 cname)将包含原点 URL,而不是用于访问 CloudFront 分发的 URL,看起来像 <a href="uncached.xyz.com/info"><a>
它应该在的位置<a href="xyz.com/info"><a>
。
总结
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 来处理原始响应并在需要时替换内容。