我要做什么的一些摘要。我有一个在AWS Elastic Beanstalk实例上运行的Phoenix应用程序,并且正在发送包含PDF的REST API请求以进行操作(拆分,合并等)。每个请求都保存在数据库中。我的requests
模式如下所示:
schema "requests" do
field :body, :string
field :endpoint, :string
field :method, :string
field :request_host, :string
field :response_body, :string
field :response_code, :integer
field :work_group_id, :integer
field :identifier, :string
field :responded_at, :utc_datetime
timestamps()
end
通过Graphql,我从单独的RAILS服务器发出请求,并显示所有请求的主机名,insert_at和response_code
我在尝试解析客户端的主机名时遇到问题。这是我使用的Erlang方法,其中方法参数remote_ip相对为conn.remote_ip
:
{:ok, {:hostent, request_host, _, _, _, _}} = :inet.gethostbyaddr(remote_ip)
此方法返回我的Phoenix应用程序的请求主机,而不返回客户端的请求主机。
我在这里做错了什么?
在此先感谢:)
答案 0 :(得分:1)
如docs中所述:
[{
remote_ip
]字段应由理解例如X-Forwarded-For
标头或HAProxy的PROXY协议。默认为对等方的IP。
在here上有详细说明:
当您的应用在Nginx之类的代理后面运行时,该请求看起来就像是来自Nginx,即IP为127.0.0.1。同样,如果Nginx位于CDN后面,则所有请求都将来自CDN的IP。
因此,您可以编写一个插件来覆盖remote_ip
的{{1}}字段。以下是这种插头的示例。此示例是从this blog post复制的。
Plug.Conn
答案 1 :(得分:1)