场景描述:
利用nginx做反向代理服务器,反向代理后端web服务器资源给用户(也是nginx服务)。
问题:
启用nginx服务的后端服务器web日志记录不能正确的记录客户机发起访问的IP地址,而是记录nginx代理服务器的地址(内网);
解决方法:
调用nginx服务中的--with-http_realip_module 模块
nginx -V
查看nginx版本以及所安装的模块,检查是否带有--with-http_realip_module模块
我这边是通过yum安装的nginx,没有指定模块就默认全部安装,所以包含该模块;
如果不存在该模块,请参考此篇文章:
yum安装下的nginx,如何添加模块,和添加第三方模块 - caigan - 博客园 (cnblogs.com)
————————————————————————————
当模块安装完毕后;需要进行如下两步操作:
一、在nginx代理服务器的location块内,添加如下配置:
proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
二、在nginx的web服务器的http块内、server块外添加如下配置:
set_real_ip_from x.x.x.x;
x.x.x.x对应的ip地址为nginx代理服务器的地址。
进行上述两步操作后,都需要重启nginx服务;
systemctl restart nginx
service restart nginx
后续查看web服务器的nginx访问日志就能正确记录客户机IP地址了。