Nginx作为反向代理时传递客户端IP的设置⽅法
nginx默认配置⽂件⾥⾯是没有进⾏⽇志转发配置的,这个需要我们⾃⼰⼿动来操作了,当然后端的real server不同时操作⽅法是不⼀样的,这⾥我们分别例举⼏种情况来说明⼀下。
nginx做前端,转发⽇志到后端nginx服务器:
因为架构的需要采⽤多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。
同样适⽤于前端是 Squid 或者其他反向代理的情况。
⾸先前端的 Nginx 要做转发客户端 IP 的配置:
location / {
proxy_pass localhost:8000;
# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
后端的 Nginx 需要安装⼀个 Module:,编译的时候默认不包含此 Module,需要重新编译安装 Nginx,configure 的时候加上–with-http_realip_module,Nginx 升级或者添加/删除 Module 时⽀持,可以避免中断服务。
升级后配置 NginxHttpRealIpModule,set_real_ip_from 就是指前端 Nginx 或者 Squid 的 IP:
location / {
proxy_pass localhost:8000;
# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
# NginxHttpRealIpModule
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
real_ip_header X-Real-IP;
}
最后记得 reload Nginx config
nginx做前端,转发⽇志到后端apache服务器:
apache⽇志中默认有%h来指定来访客户端你的ip地址,但是使⽤了nginx代理上⽹则%h获得的ip地址会不准。
这就需要对nginx 和apache的配置⽂件设定 X-Forwarded-For 参数来获取客户端真实的ip地址。对于使⽤了反向代理的客户端,跟踪真实的ip地址。
/usr/nginx/f 添加以下参数:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
同时修改:
server {
listen 80;
server_name 域名 ;
proxy_redirect off;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header Host $host;
nginx部署前端项目proxy_pass 域名;
}
access_log off;
}
wget stderr/apache/rpaf/download/mod_rpaf-0.
tar zxvf mod_rpaf-0.
cd mod_rpaf-0.6
/opt/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
修改apache配置 /usr/apache2/f
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips ip地址 #Nginx所在服务器的IP
RPAFheader X-Forwarded-For
重启apache 查看⽇志就可以看见⽇志中已经获得到真实ip了。
nginx做前端,转发⽇志到后端IIS服务器:
iis 如果放在反向代理后⾯,⽇志⾥的ip是反向代理服务器的ip,不是真正⽤户的ip,想要记录⽤户的ip要做两件事。
1.在反向代理设置X-Forwarded-For段,以下为nginx下的配置⽰例:
server
{
location
{
……
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
……
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论