2017-10-21 21 views
1

は、ここで私は、ユーザーのIPアドレスを記録しています方法は次のとおりです。IPアドレス127.0.0.1

{a, b, c, d} = conn.remote_ip 
ip_addr = "#{a}.#{b}.#{c}.#{d}" 

私はそれをテストしていたときにそれも、リモートサーバー上で、常に127.0.0.1です製造。どうしたの?

nginxから正しいヘッダーが渡されます。

+4

haproxyやnginxなどのロードバランサやプロキシを使用していて、クライアントIPが正しく転送されていないと思います。 –

+1

あなたのprod設定を共有できますか? –

+1

@IvanYurov nginxの設定で適切なヘッダーを設定しました – Moraji

答えて

0

ほとんどの場合、アプリケーションの前にリバースプロキシまたはロードバランサを使用している可能性があります。

このシステムは、アプリケーションにconnectios(クライアントに代わって)を確立します。アプリケーションと同じホスト上で実行されているため、常に127.0.0.1がリモートホストとして表示されます。

リバースプロキシは通常、HTTPヘッダーX-Forwarded-Forを挿入します。そのヘッダーから値を抽出すると、目的のホストを取得できるはずです。

クライアントとアプリケーションの間には複数のプロキシが存在する可能性があるので注意してください。そのような場合には、ヘッダは、あなたがあなたのために、関連するホストであるかを決定するためにいくつかのロジックが必要になります。この場合、

X-Forwarded-For: client, proxy1, proxy2 

のように見えるかもしれません。