【发布时间】:2019-01-18 11:23:49
【问题描述】:
我正在尝试做的一个小总结。我有一个在 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 服务器发出请求,并显示所有请求的主机名、inserted_at 字段和 response_code 字段。
我在尝试解析客户端的主机名时遇到问题。这是我正在使用的 Erlang 方法,其中方法参数 remote_ip 相对conn.remote_ip:
{:ok, {:hostent, request_host, _, _, _, _}} = :inet.gethostbyaddr(remote_ip)
此方法返回我的 Phoenix 应用程序的请求主机,而不是客户端的。
我在这里做错了什么?
在此先感谢:)
【问题讨论】:
-
在所描述的过程中根本没有任何“客户”的概念。
-
目前我正在通过 REST CLIENT(insomnia) 将请求发送到服务器。
-
它并没有让事情变得更清楚。你希望抓住谁的 IP?
-
remote_ip - 客户端的 IP,例如:{151, 236, 219, 228}。该字段旨在被理解的插件覆盖,例如X-Forwarded-For 标头或 HAProxy 的 PROXY 协议。它默认为对等方的 IP。 (这是对我尝试使用的 conn.remote_ip 的解释)
-
Elastic Beanstalk 是否配置了反向代理 nginx?它可能会在 conn 上设置 ip 地址。有几个插件包可以从 X-forwarded-for 标头设置 conn.remote_ip。
标签: elixir phoenix-framework hostname