如何在 Phoenix rest api 中获取客户端 IP

azh*_*ik3 5 elixir phoenix-framework

我在 Elixir Phoenix 中有 rest API,我想记录每个请求者客户端 IP。目前,我正在使用以下代码来获取客户端 IP:

conn.remote_ip |> Tuple.to_list |> Enum.join(".")
Run Code Online (Sandbox Code Playgroud)

但是,它给了我本地 IP 127.0.0.1

然后,我使用了以下代码:

remote_ips = Plug.Conn.get_req_header(conn, "x-forwarded-for")
remote_ip = List.first(remote_ips)
Run Code Online (Sandbox Code Playgroud)

它给了 nil x-forwarded-for

请帮我解决这个问题。

nes*_*unc 2

上面的解决方案有效,但我也遇到了这个问题,我发现了非常复杂的解决方案,但是我检查了合理分析是如何做到这一点的,这就是。

来自合理分析的源代码:

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
Run Code Online (Sandbox Code Playgroud)