我正在尝试缓存一个位于 EC2 上的网站,它有一个 URL uncached.xyz.com
,所以我创建了一个指向原点的 Cloud Front,uncached.xyz.com
并创建了一个xyz.com
指向 Cloudfront 分布的记录,命名为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>
.
tl:博士
CloudFront 应该返回:(
<a href="xyz.com/info"><a>
这是访问的指向 CDN 分发(缓存的网站)的 url)
但它返回:(
<a href="uncached.xyz.com/info"><a>
这是包含要缓存的数据的原始 URL(网站))
有没有办法“欺骗”原始服务器以认为用于访问它的 url 是 CloudFront 分配而不是配置的原始 URL?
我正在使用的更简单的版本。
有几种方法可以做到这一点:
在 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 来处理原始响应,并在需要的地方替换内容。
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-updating-http-responses.html