在这篇条记中,我们将考试测验探求一种通用的方案,该方案可以让我们方便地定位到客户真个真实 IP 地址。
该条记将记录:在 Nginx 中,调试并获取客户端真实网络地址(IP Address)的干系方法。
客户真个真实网络地址是通过 HTTP 要求头通报的(除了 Proxy 协议,由于我们用的不多,以是这里未谈论该协议)

以是,我们打印所有的与网络地址有关的变量及要求头(至少是我们知道的),这样我们就能知道各种地址信息:
log_format client_ip_address '[$time_local] Host="$http_host", ' 'Forwarded="$http_forwarded", ' 'X-Forwarded-For="$http_x_forwarded_for", ' 'X-Forwarded-Host="$http_x_forwarded_host", ' 'X-Forwarded-Proto="$http_x_forwarded_proto", ' 'X-REAL-IP="$http_x_real_ip", ' 'realip_remote_addr="$realip_remote_addr", ' 'remote_addr="$remote_addr", ' 'server_addr="$server_addr", ' 'upstream_addr="$upstream_addr", ' ;server {... access_log /var/log/nginx/client-ip-address.log client_ip_address; ...}
在这些地址中,如果没有涌现客户真个真实网络地址,那多数表示上游下来的要求存在问题。须要修正上游做事,以通报客户端真实网络地址。
第二步、设置要求头,以通报真实地址如果客户真个真实网络地址涌如今这些字段中,那么我们须要将该地址通报给下贱做事器。
这样要根据下贱做事器的哀求进行设置,比如下贱做事器从 X-Forwarded-For 中读取客户端真实网络地址,那我们这里的 Nginx 就要设置:
# proxy_set_header X-Forwarded-For <the variable containing real_ip_address># 比如,如下配置行proxy_set_header X-Forwarded-For $remote_addr;
把稳事变,在 RFC 中,没有 X-Real-IP 字段的描述,该字段可能是 Web Server 自定义的字段。如果下贱做事器从 X-Real-IP 中读取客户端真实网络地址,那我们就要设置 X-Real-IP 字段。
干系链接与代理有关的 HTTP 字段
参考文献Alphabetical index of variables