2017-10-21 2 views
1

Hier ist, wie ich eine IP-Adresse eines Benutzers bin der Aufnahme:IP-Adresse eines Benutzers immer 127.0.0.1

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

Es ist immer 127.0.0.1, auch auf einem Remote-Server, wenn ich es testen bin in Produktion. Was ist los?

Die richtigen Header werden von nginx übergeben.

+4

Ich würde vermuten, dass Sie einige Load Balancer oder Proxy, wie Haproxy oder Nginx verwenden, und Client-IP wird nicht ordnungsgemäß weitergeleitet. –

+1

Können Sie Ihre Prod-Konfiguration teilen. –

+1

@IvanYurov Ich habe die richtigen Header in Nginx-Konfiguration eingerichtet – Moraji

Antwort

0

Sie verwenden wahrscheinlich einen Reverse Proxy oder Load Balancer vor Ihrer Anwendung (wie Sie wahrscheinlich sollten).

Dieses System baut Verbindungen (im Auftrag des Clients) zu Ihrer Anwendung auf. Da es auf demselben Host wie Ihre Anwendung ausgeführt wird, wird immer 127.0.0.1 als Remote-Host angezeigt.

Ein Reverse Proxy wird normalerweise einen HTTP-Header X-Forwarded-For einfügen. Durch Extrahieren des Werts aus dieser Kopfzeile sollten Sie den Host abrufen können, an dem Sie interessiert sind.

Bitte beachten Sie, dass auf dem Weg zwischen dem Client und Ihrer Anwendung möglicherweise mehrere Proxys vorhanden sind. In einem solchen Fall könnte der Header aussehen

X-Forwarded-For: client, proxy1, proxy2 

In diesem Fall, dass Sie eine gewisse Logik brauchen werden, um zu bestimmen, welche die entsprechenden Host für Sie.

Verwandte Themen