nginx反向代理,使后端nginx日志可以打印真实访客IP

有个网站,采用了前后端分离的架构。也就是域名指向前端服务器,前端服务器收到请求后再转发给后端服务器。

前端服务器只安装了nginx,通过proxy_pass把用户的访问请求转给后端服务器处理。后端服务器安装的是lnmp服务,即nginx+php-fpm+mysql。收到前端服务器的请求后转给PHP处理,再通过前端服务器返回给用户。

由于后端服务器是和前端服务器直接交互,所以nginx的输出日志里面,IP地址是前端服务器的IP地址。这样就不容易知道真实访客的IP地址。

通过设置,可以使后端nginx显示真实访客的IP地址,而不是前端服务器的IP地址。

首先,要确保后端nginx集成了real_ip模块。linux上通过命令nginx -V,即可看到:

如上图,如果看到有–with-http_realip_module,就代表nginx已经集成了real_ip模块。

否则,需要重新编译nginx。

编译也很简单,直接把nginx -V查看到的nginx编译选项复制,在后面加上
–with-http_realip_module 这个选项,再到nginx的源码目录执行./configure就可以了。

比如:

./configure –user=www –group=www 此处省略若干字 –with-http_realip_module

如果没出现什么错误,就可以再make;make install就可以了。

然后,在vhost的设置中,增加

set_real_ip_from 127.0.0.1;
set_real_ip_from 前端服务器的IP地址;
real_ip_header X-Real-IP;

再重启nginx即可。

注:仅仅nginx -s reload是不行的。必须/etc/init.d/nginx stop再start才好。


Posted

in

by

Tags:

Comments

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注