Nginx 反向代理下拿到客户端的真实IP
来源:互联网 发布:同步带传动计算软件 编辑:程序博客网 时间:2024/05/29 18:15
前段时间在做AOP的Log记录的时候需要拿到用户的真实ip 然后一直拿不到用户的真实ip 拿到的一直是Nginx 上的ip地址 才知道在Nginx 经过反向代理后是拿不到真实的ip地址的 在没有经过Nginx 反向代理 之前 直接使用 request.getRemoteAddr() 拿到客户端的真实ip在大多情况都是Ok 的
但是现在有了反向代理后 就需要对code 做一些处理 都知道Nginx 是一个转发代理服务器的中间件 所以服务器无法直接拿到客户端的ip服务器端应用也无法直接通过转发请求的地址返回给客户端。也就是当我们在访问xx.jsp/时,其实并不是我们浏览器真正访问到了服务器上的xx.jsp 文件,而是先由代理服务器去访问xx.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问xx.jsp的,所以xx.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
在经过强大的百度后原来在转发请求的HTTP头部信息中 增加了X-FORWARDED-FOR信息。用以跟踪 原有的客户端IP地址和原来客户端请求的服务器地址。
那就可以得到客户端的真实ip
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
这也是一种方法
第二种方法就是
当在经过多级的反向代理后 X-FORWARDED-FOR 的值不只一个而是一串ip 值
这时候也不去确定那个是有效的ip 可以直接取X-FORWARDED-FOR中第一个非unknown 的有效Ip字符串
这样就行了
然后在修改写Nginx 的Nginx.conf 配置文件
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
把这些加进去就可以
- Nginx 反向代理下拿到客户端的真实IP
- Nginx反向代理获取客户端真实IP
- Nginx反向代理获取客户端真实IP
- Nginx反向代理获取客户端真实IP
- nginx设置反向代理,获取真实客户端ip
- nginx反向代理后应用程序如何获取客户端真实IP?
- 通过nginx反向代理,Tomcat获取真实的客户端IP而非服务器IP
- nginx反向代理后获取不到客户端的真实ip地址
- 以cdn为前导,使用Nginx服务器反向代理,获取客户端真实ip的办法
- 使用nginx等反向代理时获取Windows版客户端真实的ip及mac地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- 多级反向代理[Squid]下获取客户端真实IP地址
- D. Substrings
- Android脱壳圣战之---脱掉360加固壳(破解约火包神器的钻石充值功能)
- android studio 修改注释Created by 作者名的方法
- 5. Go 语言的类型系统(Go Tutorial)
- OkHttpClient 上传文件
- Nginx 反向代理下拿到客户端的真实IP
- Redis压力测试报告
- java 8 时间控件
- 机器学习标准教科书PRML的Python实现:最佳读书伴侣
- JD-GUI反编译器无法使用的问题
- tomcat单机多实例部署
- 震撼大数据!80后年薪多少,才能摆脱中年危机?
- OneinStack
- 行人检测算法评估标准