request.remote_ip正在改变?

时间:2013-07-10 03:01:49

标签: ruby-on-rails heroku cloudflare

我在Heroku + CloudFlare中托管了一个Rails应用程序。问题是request.remote_ip报告的ip偶尔会发生变化,即使我的公共ip保持不变。

可能是Heroku,CloudFlare,还是两者兼而有之?

2 个答案:

答案 0 :(得分:2)

你必须使用x-forwarded-for标题,Heroku和CloudFlare都应该设置它。文档:

答案 1 :(得分:2)

当Cloudflare作为反向代理运行时,它会设置此http标头:CF-Connecting-IP并将客户端的IP附加到X-Forwarded-For标头。

来自:https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-CloudFlare-handle-HTTP-Request-headers-

请注意,使用/依赖x-forwarded-for不是一个好主意,因为它可以非常容易地欺骗。但是,x-forwarded-for中的最后一个值应该是clpoudflare在那里粘贴的IP。我假设你在这里使用cloudflare作为反向代理,cloudflare直接从服务器向你的原始服务器发送http请求。

我与Cloudflare进行了对话。当请求(到您的源服务器)来自其中一个代理服务器(这是Cloudflare的用途)时,它们保证CF-Connecting-IP头由它们设置。我相信它们放入此标头的实际值来自原始请求者的TCP数据包。因此,这是在使用cloudflare时获取请求者IP的最准确方法(无论是否使用Heroku作为原始服务器)。

Cloudflares代理服务器的IP值可在此处找到:https://www.cloudflare.com/ips

更清楚(来自Cloudflare):价值来自用户连接到我们的地址,因为它是我们前端欺骗的TCP握手将是一个挑战。也就是说,如果有人直接连接到您的原点并且只是自己插入标题(没有散列或加密),那么它是合理的欺骗。