我有一个托管在 Heroku + CloudFlare 中的 Rails 应用程序。问题是 request.remote_ip 报告的 ip 不时更改,即使我的公共 ip 保持不变。
会不会是 Heroku、CloudFlare 或两者兼而有之?
我有一个托管在 Heroku + CloudFlare 中的 Rails 应用程序。问题是 request.remote_ip 报告的 ip 不时更改,即使我的公共 ip 保持不变。
会不会是 Heroku、CloudFlare 或两者兼而有之?
您必须使用x-forwarded-for
标头,Heroku 和 CloudFlare 都应该设置它。文件:
当 Cloudflare 作为反向代理运行时,它会设置此 http 标头:CF-Connecting-IP 并将客户端的 IP 附加到 X-Forwarded-For 标头。
请注意,使用/依赖 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 握手将是一个挑战。也就是说,如果有人直接连接到您的来源并且只是自己插入标头(未散列或加密),则它是合理的欺骗。