有个网站,采用了前后端分离的架构。也就是域名指向前端服务器,前端服务器收到请求后再转发给后端服务器。
前端服务器只安装了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才好。
发表回复