使用nginx反向代理 在web服务器日志获取客户ip
来源:14-5 nginx负载均衡注意事项

stevenfung
2020-10-10
你好老师
我使用nginx作反向代理,然后下面又有3个nginx作web服务器,
我在反向代理nignx的设置中增加了你之前提及的3条参数:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
在web服务器中可以使用tp提供的方法获取到用户的正式ip
如:
$header = $this->request->header();
dump($header);
输出如:
"x-forwarded-for" => "223.234.23.121"
"x-real-ip" => "223.234.23.121"
但是我从web服务器的日志中还是无法得到此客户真实IP,显示的还是内网的反向代理nginx的IP
请问有何方法,使得在web服务器的日志中记录客户真实IP?
写回答
1回答
-
天经地义
2020-10-10
proxy_set_header Host $host; # 设置header中的Host参数,值为$host这个变量的值 proxy_set_header X-Real-IP $remote_addr; # 设置header中的X-Real-IP参数,值为$remote_addr这个变量的值 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置header中的X-Forwarded-For参数,值为$proxy_add_x_forwarded_for这个变量的值
上面这三个设置请求的header,目的是想要将下游客户端的ip传递给上游的服务
反向代理时可以使用nginx的ngx_http_realip_module模块传递真实IP可以参考下面这个官方文档
http://nginx.org/en/docs/http/ngx_http_realip_module.html
php能获取到真实IP,而您的nginx日志还不是,主要是用错了变量,您可以尝试将nginx的log_format中“$remote_addr”改为“$http_x_forwarded_for”或“$http_x_real_ip”,或者直接添加这两个变量,重启下nginx再次请求看下
012020-10-12
相似问题