我正在使用具有自定义源的CloudFront,并希望将来自Web应用程序的某些请求重定向到CloudFront(客户端使用直接URL,这些URL无法更改为基于CloudFront的URL)。为了确保CloudFront上的缓存正确更新,我不得重定向来自CloudFront本身的请求。有没有办法在原始服务器上识别此类请求?
CloudFront是否会向发送到源服务器的请求添加任何自定义标头?或者是否有任何其他可靠的方法来确定请求来自CloudFront?
答案 0 :(得分:13)
是的,您可以通过检查useragent来识别从cloudfront到您的源服务器的请求。用户代理将是“Amazon CloudFront”
答案 1 :(得分:11)
对于来自Amazon CloudFront服务器的请求,Avinash Bijja正确pointed out(+1)HTTP User-agent标头将是“Amazon CloudFront”。不幸的是,这似乎没有明确记录,但是在相应论坛中的各个帖子中暗示了这一点,例如, AWS团队对User Agent String - does CF overwrite the user agent string?的回复:
你是对的。 User-Agent字段始终填充为“Amazon CloudFront”。
然而,事实证明,如果原始客户请求中缺少一个CloudFront sends an empty User-Agent to the origin,则目前这不是完全可靠的:
我可以确认CloudFront没有向用户代理发送 原始客户端未发送用户代理时的原点。我们有 增强功能修复了我们的待办事项上的用户代理处理,但没有 此时发布日期。我已经向你发送了一份有关更多细节的PM。
这些增强功能&至少截至2013年2月7日,修复显然尚未推出。 击>
这些增强功能&修复have been rolled out as of August 05 2013(感谢webbiedave更新!)。
CloudFront是否会向发送到源的请求添加任何自定义标头 服务器
人们会这么认为,但至少它们似乎没有记录在我预期的地方,即How CloudFront Processes and Forwards Requests to Your Custom Origin Server。鉴于您可以控制原始服务器,您可能只是检查其HTTP访问日志?
或者是否有其他可靠的方法来确定请求 来自CloudFront?
您需要自己判断可靠性,但 CloudFront转发到源服务器的IP地址是CloudFront服务器的IP地址,而不是最终用户计算机的IP地址。 - 因此您可以限制对已发布的Amazon CloudFront Public IP Ranges的访问权限;但是,请注意相应的免责声明:
CloudFront IP地址经常更改,我们无法保证 提前通知变更。在尽力而为的基础上,我们将提供 当前地址列表。 客户不应使用这些地址 对于关键任务应用程序,绝不能在DNS中对其进行硬编码 名。 [强调我的]
因此,您需要监控此论坛/帖子,以便尽早注意相应的更改(如果您的用例在第一时间可以接受此约束)。
答案 2 :(得分:9)
<强>更新强>
这是一个老问题,但我的更新对某人研究或寻找新解决方案很有用。
最近,AWS添加了新功能Origin Custom Headers。您可以设置带有密码值的标头,并通过Web服务器或您的应用程序在源服务器上进行检查。
答案 3 :(得分:1)
CloudFront似乎在将每个请求转发到原始请求之前添加X-Amz-Cf-Id
标头。至少,它目前正在为我做这件事。
答案 4 :(得分:0)
这应该是对Reza答案的评论,但我不能这样做:)。
为了完整起见,这里是关于Forwarding Custom Headers的官方文档的链接,该文档目前声明如下。
您可以将CloudFront配置为在将请求转发到您的来源时包含自定义标头。您可以为每个源指定自定义标头的名称和值,包括自定义源和Amazon S3存储桶。自定义标头具有多种用途,例如:
您可以识别CloudFront转发到您的自定义来源的请求。如果您想知道用户是否绕过CloudFront,或者您是否使用多个CDN并且想要了解哪些请求来自每个CDN,则此功能非常有用。 (如果您使用的是Amazon S3源并且启用了Amazon S3服务器访问日志记录,则日志不包含标头信息。)