AWS Cloud Front,如何使用正确的 URL 请求来源

AWS Cloud Front,如何使用正确的 URL 请求来源

我正在尝试缓存 EC2 上的一个网站,它有一个 URL uncached.xyz.com,因此我创建了一个指向原点的 Cloud Front ,并创建了一条指向 cloudfront 分布的uncached.xyz.com记录,命名为,xyz.comd111111abcdef8.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 来处理原始响应并在需要时替换内容。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-updating-http-responses.html

相关内容