![AWS Cloud Front,如何使用正确的 URL 请求来源](https://linux22.com/image/762313/AWS%20Cloud%20Front%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%AD%A3%E7%A1%AE%E7%9A%84%20URL%20%E8%AF%B7%E6%B1%82%E6%9D%A5%E6%BA%90.png)
我正在尝试缓存 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 来处理原始响应并在需要时替换内容。