我在Elixir Phoenix中有其他API,我想记录每个请求者客户端IP。目前,我使用以下代码来获取客户端IP:
conn.remote_ip |> Tuple.to_list |> Enum.join(".")
但是,它给了我本地IP 127.0.0.1
。
然后,我使用了以下代码:
remote_ips = Plug.Conn.get_req_header(conn, "x-forwarded-for")
remote_ip = List.first(remote_ips)
它给了nil x-forwarded-for
。
请帮我解决这个问题。
答案 0 :(得分:0)
以上解决方案都可行,但是我也遇到了这个问题,我发现了非常复杂的解决方案,但是我检查了Plausible Analytics的工作方式,现在就可以了。
来自Plausible Analytics的源代码:
defmodule MyAppWeb.RemoteIp do
def get(conn) do
forwarded_for = List.first(Plug.Conn.get_req_header(conn, "x-forwarded-for"))
if forwarded_for do
String.split(forwarded_for, ",")
|> Enum.map(&String.trim/1)
|> List.first()
else
to_string(:inet_parse.ntoa(conn.remote_ip))
end
end
end