nginx获取请求真实IP

2021-07-09  本文已影响0人  十毛tenmao

客户端和服务器之间如果通过反向代理连接,服务器端获取到的客户端IP实际上是反向代理的IP,那么有什么办法可以拿到客户端真实IP吗?

获取真实IP的原理

使用样例

./configure --with-http_realip_module
# 设置可信IP,支持多个,也支持网段和IPv6
set_real_ip_from  192.168.1.0/24;
set_real_ip_from  192.168.2.1;
# 从X-Forwarded-For解析客户端真实IP,默认是X-Real-IP
real_ip_header    X-Forwarded-For;

real_ip_recursive on;
server {
        # 省略其他配置....
        # nginx直接返回客户端IP到body
        location /ip {
            default_type text/plain;
            # 返回remote_addr, x_real_ip, realip_remote_addr, x_forwarded_for
            return 200 "remote_addr:$remote_addr\nx_real_ip:$http_x_real_ip\nrealip_remote_addr:$realip_remote_addr\nhttp_x_forwarded_for:$http_x_forwarded_for\n";
        }
}
GET /ip HTTP/1.1
User-Agent: PostmanRuntime/7.28.1
Accept: */*
x-forwarded-for: 10.43.44.73
x-real-ip: 10.43.44.73
Host: 9.134.77.51
x-client-ip: 10.43.44.73
Connection: keep-alive
Accept-Encoding: gzip
remote_addr:9.218.225.23
x_real_ip: 9.218.225.23
realip_remote_addr:9.45.201.1
http_x_forwarded_for:9.218.225.23

谓词解释

新增变量

realip模块会修改remote_addr和remote_port,会用一个realip_remote_addr和realip_remote_port表示nginx原来的地址和端口

参考

上一篇 下一篇

猜你喜欢

热点阅读