Heroku + CloudFlare でホストされている Rails アプリがあります。問題は、パブリック IP が同じままであっても、request.remote_ip によって報告される IP が時々変更されることです。
Heroku、CloudFlare、またはその両方でしょうか?
Heroku + CloudFlare でホストされている Rails アプリがあります。問題は、パブリック IP が同じままであっても、request.remote_ip によって報告される IP が時々変更されることです。
Heroku、CloudFlare、またはその両方でしょうか?
Cloudflare がリバース プロキシとして動作している場合、この HTTP ヘッダーを設定します: CF-Connecting-IP と、クライアントの IP を X-Forwarded-For ヘッダーに追加します。
x-forwarded-for を使用/依存することは、非常に簡単にスプーフィングされる可能性があるため、良い考えではないことに注意してください。ただし、x-forwarded-for の最後の値は、clpoudflare がそこに貼り付ける IP である必要があります。ここでリバース プロキシとして cloudflare を使用していて、cloudflare がそのサーバーからオリジン サーバーに直接 http 要求を送信すると仮定しています。
Cloudflareと会話しました。彼らは、(オリジンサーバーへの)リクエストがプロキシサーバーの1つ(Cloudflareの目的)から来るときに、CF-Connecting-IPヘッダーが設定されることを保証します。彼らがこのヘッダーに入れる実際の値は、元のリクエスターからの TCP パケットから来ていると思います。したがって、これは、cloudflare を使用する場合にリクエスタの IP を取得する最も正確な方法です (Heroku をオリジン サーバーとして使用するかどうかに関係なく)。
Cloudflares プロキシ サーバーの IP 値は、 https ://www.cloudflare.com/ips で確認できます。
より明確にするために(Cloudflareから):値は、ユーザーが接続するアドレスから取得されます。これは、フロントエンドのスプーフィングが困難になるTCPハンドシェイクであるためです. とはいえ、誰かがオリジンに直接接続し、自分でヘッダーを挿入した (ハッシュ化も暗号化もされていない) 場合は、なりすましが可能です。