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

时间:2012-11-23 07:52:16

标签: amazon-cloudfront

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

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

5 个答案:

答案 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服务器或您的应用程序在源服务器上进行检查。

enter image description here

答案 3 :(得分:1)

CloudFront似乎在将每个请求转发到原始请求之前添加X-Amz-Cf-Id标头。至少,它目前正在为我做这件事。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-headers-behavior

答案 4 :(得分:0)

这应该是对Reza答案的评论,但我不能这样做:)。

为了完整起见,这里是关于Forwarding Custom Headers的官方文档的链接,该文档目前声明如下。

  

您可以将CloudFront配置为在将请求转发到您的来源时包含自定义标头。您可以为每个源指定自定义标头的名称和值,包括自定义源和Amazon S3存储桶。自定义标头具有多种用途,例如:

     
    

您可以识别CloudFront转发到您的自定义来源的请求。如果您想知道用户是否绕过CloudFront,或者您是否使用多个CDN并且想要了解哪些请求来自每个CDN,则此功能非常有用。 (如果您使用的是Amazon S3源并且启用了Amazon S3服务器访问日志记录,则日志不包含标头信息。)