编译时加上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;
}