我正在写一个插件,将访问日志放入文件中,例如普通的Web服务器。作为客户端IP地址的数据源,conn
有remote_ip
和peer
。我应该使用哪个,它们之间有什么区别?
是否有任何文档描述其中的每个实体conn
?
另外,我的插件就像以下片段一样,从Elixir / Phoenix的角度来看,这自然吗?
Logger.info(
Enum.join([
"type:" <> "request",
"remoteip:" <> Enum.join(Tuple.to_list(conn.remote_ip), ","),
"method:" <> conn.method,
"path:" <> conn.request_path,
"status:" <> to_string(conn.status),
"size_res:" <> to_string(byte_size(to_string(conn.resp_body))),
], ",")
)
从Plug.Conn文档中:
peer-连接的实际TCP对等方,例如:{{127,0,0,1},12345}。通常,这不是客户端的实际IP和端口,而是负载平衡器或请求路由器。
remote_ip-客户端的IP,例如:{151、236、219、228}。该字段将被理解例如X-Forwarded-For标头或HAProxy的PROXY协议的插件覆盖。默认为对等方的IP。
如果您使用的是负载均衡器(例如http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html),则peer
IP地址将指向负载均衡器而不是客户端。负载平衡器在标头(X-Forwarded-For
适用于AWS)中提供客户端的实际IP地址,该标头将存储在Plug.Conn结构中remote_ip
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句