set_real_ip_from 192.168.1.0/24; #真实服务器上一级代理的IP地址或者IP段,可以写多行。 set_real_ip_from 192.168.2.1; real_ip_header X-Forwarded-For; #从哪个header头检索出所要的IP地址。 real_ip_recursive on; #递归的去除所配置中的可信IP。排除set_real_ip_from里面出现的IP。如果出现了未出...
这段代码首先尝试从X-Real-IP获取IP,如果不存在则尝试从X-Forwarded-For获取,最后作为备选方案从getRemoteAddr获取。 确认请求是否经过了nginx代理: 确保客户端的请求确实是通过nginx代理转发到Java后台的。可以通过查看nginx的访问日志来确认请求是否经过了nginx。 检查Java后台是否正确提取了请求头: 在Java后台代码中...
而今天,我们再看一个通过 Nginx 来处理真实 IP ,或者换句话说,让 Nginx 根据配置,从 X-Real-IP 或 X-Forwarded-For 从获取到真实 IP 并放入到 REMOTE_ADDR 中。 这个模块的全称是 ngx_http_realip_module 模块,它也不是在 Nginx 核心源码中的,同样需要在编译时加上 --with-http_realip_module 这个参数...
X-Forwarded-For与X-Real-IP 主要依赖proxy_set_header传递,所以想传什么样的值就传什么样的值。Remote-Addr建立连接的IP,有的地方也说是上一跳的IP,这个不依赖header头传递,不可更改。 所以用上面的组合,第一层代理获取到真实IP,remote_addr。使用x_real_ip层层后传,使用x_real_ip在WEB机器上获取到真实IP。
第一种情况:不通过代理上网,服务器端拿到真实IP 第二种情况:通过代理服务器如:Nginx,Squid等一层代理或多层代理上网,如下图: 需要注意的是X-Forwarded-For和X-Real-IP都不是http的正式协议头,而是squid等反向代理软件最早引入的,之所以resin能拿到,是因为NGINX里一般缺省都会这么配置转发的http请求: ...
ip = realIp + "/" + forwarded; } } return ip; } 第二种代码: 1 public static String getIp(HttpServletRequest request) { 2 String remoteAddr = request.getRemoteAddr(); 3 String forwarded = request.getHeader("X-Forwarded-For");
X-Real-IP: 1.1.1.1 // 最后一跳是反向代理,比如Nginx,一般会是与之直接连接的客户端IP X-Real-IP: 3.3.3.3 3.CDN情况下: 如果从CDN过来的请求没有设置X-Forwarded-For头(通常这种事情不会发生),而到了我们这里Nginx设置将其设置为$proxy_add_x_forwarded_for的话,X-Forwarded-For的信息应该为CDN的IP,...
proxy_add_x_forwarded_for变量,X-Forwarded-For部分包含的是用户的真实ip,$remote_addr部分的值是上一台nginx的ip地址,于是通过这个赋值以后现在的X-Forwarded-For的值就变成了“用户的真实ip,第一台nginx的ip”,这样就清楚了吧。 总结:获取客户端的IP地址不仅可以通过proxy_set_header X-real-ip ...
暂时先不用打开 real_ip_header 的注释,默认情况下使用的就是 X-Real-IP 。我们先看看它的效果。先在 192.168.56.88 上做一个反向代理。 代码语言:javascript 复制 location^~/realip/{proxy_pass http://192.168.56.89/realip/;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For $pr...
proxy_set_header X-Real-IP $remote_addr; #获取客户端的主机名存到变量X-Real-IP里面,从而让tomca...