nginx反向代理后,php通过$_SERVER['REMOTE_ADDR']获取ip时,获取到的ip都是nginx的ip 127.0.0.1 。这时需要nginx去获取客户端的ip地址,并设置到反向代理头中,供php获取使用。

一、之前nginx配置

server{
        listen      80;
        charset     utf-8;
        
        location = /test{
            proxy_pass http://127.0.0.1:8080/index.php;
        }        
}

二、设置反向代理头ip信息后的nginx配置

server{
        listen      80;
        charset     utf-8;
        
        location = /test{
            proxy_pass http://127.0.0.1:8080/index.php;
            proxy_set_header    X-Real-IP        $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
        }        
}

在反向代理中增加

            proxy_set_header    X-Real-IP        $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;

代码后,就能获取到客户端真实ip。