「Nginx」- 获取客户端的真实地址(Real IP Address) @20210217

本文档介绍了如何在Nginx中调试以获取客户端真实网络地址,包括查看HTTP请求头中的相关变量,如$remote_addr、$http_x_forwarded_for等,并设置proxy_set_header传递真实IP地址给下游服务器。注意X-Real-IP字段可能为自定义,需依据下游服务器需求配置。
摘要由CSDN通过智能技术生成

问题描述

获取客户端真实网络地址,有时候让人头疼,尤其是多种中间件联合使用时。

该笔记将记录:在 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值