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傳遞正確的標頭。
這裏是我如何記錄用戶的IP地址:用戶的IP地址127.0.0.1始終
{a, b, c, d} = conn.remote_ip
ip_addr = "#{a}.#{b}.#{c}.#{d}"
它總是127.0.0.1,即使是在遠程服務器上,當我在測試它生產。這是怎麼回事?
從nginx傳遞正確的標頭。
您很可能在應用程序之前使用反向代理或負載平衡器(因爲您可能應該這樣做)。
該系統將建立連接(代表客戶端)到您的應用程序。由於它與應用程序在同一臺主機上運行,因此您將始終將127.0.0.1視爲遠程主機。
反向代理通常會插入一個X-Forwarded-For HTTP標頭。通過從該標題中提取值,您應該能夠檢索到您感興趣的主機。
請注意,客戶端與您的應用程序之間可能有多個代理服務器。在這種情況下,頭部可能看起來像
X-Forwarded-For: client, proxy1, proxy2
在這種情況下,你需要一些邏輯,以確定哪些是你的相關主機。
我猜你正在使用一些負載平衡器或代理,如haproxy或nginx,並且客戶端IP沒有正確轉發。 –
你可以分享你的prod配置嗎? –
@IvanYurov我在nginx配置文件中設置了正確的標題 – Moraji