2017-10-21 100 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

您很可能在應用程序之前使用反向代理或負載平衡器(因爲您可能應該這樣做)。

該系統將建立連接(代表客戶端)到您的應用程序。由於它與應用程序在同一臺主機上運行,​​因此您將始終將127.0.0.1視爲遠程主機。

反向代理通常會插入一個X-Forwarded-For HTTP標頭。通過從該標題中提取值,您應該能夠檢索到您感興趣的主機。

請注意,客戶端與您的應用程序之間可能有多個代理服務器。在這種情況下,頭部可能看起來像

X-Forwarded-For: client, proxy1, proxy2 

在這種情況下,你需要一些邏輯,以確定哪些是你的相關主機。