我在多个负载平衡代理后面设置了一个 nginx 实例,并且我使用real_ip
它来获取 remote_addr 中的客户端 IP 地址,以供我的 Python 应用程序处理。
然而,在我的记录中,我想记录实际发出请求的代理服务器,但$remote_addr
现在已被覆盖,并且我找不到任何表明已制作其副本的内容。
我怎样才能实现这个目标?
答案1
答案2
您不太明白是否要在 nginx 端或应用程序内部进行记录?
对于 nginx 端,你可以在 nginx log_format 定义中使用$http_x_forwarded_for
,如下所示:
log_format main '$remote_addr - $remote_user [$time_local] [$msec] '
'[$request_time] "$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
答案3
模块本身似乎不支持这一点。但是,反向代理(real_ip 最常用于此)可能会提供包含代理 IP 地址的 HTTP 标头字段。
不幸的是,您无法检查地址是否已被重写,因此未通过启用 real_ip 的代理连接的客户端可以伪造标头字段。
检查您的代理的文档,也许您可以使用 HTTP 标头字段来获取 IP 地址。