有没有办法识别从CloudFront到自定义源服务器的请求?

Dim*_*nko 14 amazon-cloudfront

我正在使用具有自定义源的CloudFront,并希望将来自Web应用程序的某些请求重定向到CloudFront(客户端使用直接URL,这些URL无法更改为基于CloudFront的URL).为了确保CloudFront上的缓存正确更新,我不得重定向来自CloudFront本身的请求.有没有办法在原始服务器上识别此类请求?

CloudFront是否会向发送到源服务器的请求添加任何自定义标头?或者是否有任何其他可靠的方法来确定请求来自CloudFront?

小智 13

是的,您可以通过检查useragent来识别从cloudfront到您的源服务器的请求.用户代理将是'Amazon CloudFront'

  • 另请参阅下面的答案,了解主要的陷阱:"CloudFront将空的User-Agent发送到原点" (2认同)

Ste*_*pel 11

更新

Avinash Bijja正确地指出(+1)对于来自Amazon CloudFront服务器的请求,HTTP User-agent标头将是"Amazon CloudFront".不幸的是,这似乎没有明确记录,但是相应论坛中的各个帖子都暗示了这一点,例如,参见AWS Team对用户代理字符串的响应- CF是否覆盖了用户代理字符串?:

你是对的.User-Agent字段始终填充为"Amazon CloudFront".

但是,事实证明,如果原始客户端请求中缺少一个用户代理,则CloudFront目前还不完全可靠:

我可以确认,当原始客户端未发送用户代理时,CloudFront不会将用户代理发送到源.我们在待办事项上对User-Agent处理进行了增强和修复,但目前没有发布日期.我已经寄给你一个有更多细节的PM.

至少截至2013年2月7日,这些增强功能和修复程序显然尚未推出.

这些增强功能和修复程序已于2013年8月5日推出(感谢webbiedave的更新!).


初步答复

CloudFront是否会向发送到源服务器的请求添加任何自定义标头?

人们会这么认为,但至少它们似乎没有记录在我预期的位置,即CloudFront如何处理和转发对自定义源服务器的请求.鉴于您可以控制原始服务器,您可能只是检查其HTTP访问日志?

或者是否有任何其他可靠的方法来确定请求来自CloudFront?

您需要自己判断可靠性,但CloudFront转发到源服务器的IP地址是CloudFront服务器的IP地址,而不是最终用户计算机的IP地址.- 因此,您可以限制对已发布的Amazon CloudFront公共IP范围的访问 ; 但是,请注意相应的免责声明:

CloudFront IP地址经常更改,我们无法保证提前通知更改.在尽力而为的基础上,我们将提供当前地址列表.客户不应将这些地址用于关键任务应用程序,也不得在DNS名称中对其进行硬编码.[强调我的]

因此,您需要监控此论坛/帖子,以便尽早注意相应的更改(如果这个约束在您的用例中首先是可接受的).

  • 我可以确认,截至今天,这仍然是一个问题.如果原始请求具有空的用户代理,CloudFront将不会发送用户代理. (2认同)

Rez*_*avi 10

更新

这是一个老问题,但我的更新对某人研究或寻找新解决方案很有用.

最近AWS添加了新功能Origin Custom Headers.您可以设置带有秘密值的标头,并通过Web服务器或您的应用程序在源服务器上进行检查.

在此输入图像描述

  • 这是唯一正确的答案.否则,您无法阻止另一个CloudFront客户设置分发并将其指向您的原始分发.仅对CloudFront IP,UserAgent或任何其他常见属性进行简单检查是不够的. (3认同)