NGINX转发代理情况下,获取客户单真实IP

编译时加上http_realip_module 模块

realip模块生效的前提是:直接连接nginx的ip是在set_real_ip_from中指定的。

原机配置:

set_real_ip_from  30.0.0.226;     #代理服务器的IP地址
real_ip_header    X-Forwarded-For;
real_ip_recursive on;

set_real_ip_from:指定30.0.0.226是反代服务器(信任服务器),不是真实的用户IP

real_ip_header:指定真正的用户IP是存在X-Forwarded-For请求头中

当real_ip_recursive为off时,nginx会把real_ip_header指定的HTTP头中的最后一个IP当成真实IP

当real_ip_recursive为on时,nginx会把real_ip_header指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP

在多级代理的情况下,real_ip_header指定的HTTP头中包含了多个IP,包括该NGINX前面的信任服务器

代理服务器配置:

location ~ / {
    index index.php index.html index.htm;
    proxy_pass  http://30.0.0.227:80;   #后端服务器IP
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

猜你喜欢

转载自www.cnblogs.com/wshenjin/p/9135160.html