nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,那么如何转发用户的真实IP到后端程序呢?
当前端使用nginx代理,后端使用php-fpm时,如果还是使用$_SERVER[‘REMOTE_ADDR’],那么php程序获取到的是nginx的ip地址,而不是用户的真实ip。
此时需要在nginx的配置文件中加入下面三个指令
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
修改后如下图所示
server {
listen www.264.cn:80;
server_name www.264.cn;
location / {
proxy_pass http://www.264.cn;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样后端php就可以使用 $_SERVER[‘HTTP_X_REAL_IP’] 获取到访客的ip。