场景:

在演练环境中,通过F5做负载均衡,前端项目获取的却是F5机器的ip。
日志截图:


分析:

从上图可以看到,X-Forwarded-For是null,其他的也都是null,只有通过getRemoteAddr()可以获取ip,但不是我们想要的;
那么问题就来了,X-Forwarded-For为什么是null?


解决:

经与负责F5的技术人员沟通是其没有在F5中添加X-Forwarded-For,导致它为null,之后添加上后,再获取时,就可以获取到客户端真实的ip了;
如图:


F5配置

F5中开启AutoMap,并传递X-Forwarded-For值

开启F5源地址转换"Auto Map"
https://images2015.cnblogs.com/blog/582266/201605/582266-20160517125509888-1957873778.png

方式一: 在http profile中开启X-Forwarded-For

方式二:在iRule中开启X-Forwarded-For

when HTTP_REQUEST {HTTP::header insert "X-Forwarded-For" [IP::client_addr]
}

具体参考官方文档: 传送门


java项目获取

 public String getIpAddress(HttpServletRequest request) {// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址String ip = request.getHeader("X-Forwarded-For");String ipx = request.getHeader("x-forwarded-for");logger.info("------ X-Forwarded-For ip:" + ip);logger.info("------ x-forwarded-for ip:" + ipx);if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {// 多次反向代理后会有多个ip值,第一个ip才是真实ipif (ip.indexOf(",") != -1) {ip = ip.split(",")[0];logger.info("------ 第一个 ip:" + ip);}}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");logger.info("------ Proxy-Client-IP ip:" + ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");logger.info("------ WL-Proxy-Client-IP ip:" + ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");logger.info("------ HTTP_CLIENT_IP ip:" + ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");logger.info("------ HTTP_X_FORWARDED_FOR ip:" + ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Real-IP");logger.info("------ X-Real-IP ip:" + ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();logger.info("------ getRemoteAddr ip:" + ip);}logger.info("客户端访问ip地址为:【" + ip + "】");return ip;}

author:su1573
鄙人记录生活点滴,学习并分享,请多指教!!!
如需交流,请联系 sph1573@163.com,鄙人看到会及时回复

javaweb项目通过F5负载,获取客户端真实ip相关推荐

  1. 获取客户端真实IP地址

    Java-Web获取客户端真实IP: 发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP. 一般分为两种情况: ...

  2. Java正确获取客户端真实IP方法整理

    转载自 干货:Java正确获取客户端真实IP方法整理 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apach ...

  3. vue获取url中ip_Kubernetes 集群中这样获取客户端真实 IP

    Kubernetes 依靠 kube-proxy 组件实现 Service 的通信与负载均衡.在这个过程中,由于使用了 SNAT 对源地址进行了转换,导致 Pod 中的服务拿不到真实的客户端 IP 地 ...

  4. 获取客户端真实 IP

    Tomcat + Nginx 反向代理获取客户端真实IP.域名.协议.端口 Nginx 反向代理后,Servlet 应用通过 request.getRemoteAddr() 取到的 IP 是 Ngin ...

  5. 获取客户端真实ip的方法

    为什么需要获取客户端真实ip ip地址是按地域分布的,服务器获取到客户端ip后可以做流量统计和分析,服务器也可以针对客户端ip做一些定制化的功能,比如限流和黑白名单. 网络环境十分复杂,客户端发出的一 ...

  6. 获取客户端真实IP方法

    2019独角兽企业重金招聘Python工程师标准>>> 我们经常会记录审计日志,那么如何获取客户端真实IP呢?让我们了解一下HTTP协议头吧. 在讨论获取客户端IP 地址前,我们首先 ...

  7. 如何获取客户端真实 IP?从 Gin 的一个 Bug 说起

    1. 背景 请求 IP 作为用户的身份标识属性之一,是一种非常重要的基础数据.在很多场景下,我们会基于客户端请求 IP 去做网络安全攻击防范或访问风险控制.通常我们可以通过 HTTP 协议 Reque ...

  8. PHP获取客户端真实IP地址的方法

    php获取客户端IP地址有四种方法,这五种方法分别为 1 2 3 4 REMOTE_ADDR HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR HTTP_VIA REMOTE_A ...

  9. Java从代理服务器中获取客户端真实IP的方法

    概要 一般在单机版的tomcat获取请求来源的ip,可以使用下面方式这么干,下文的request是HttpServletRequest对象. String remoteAddr = request.g ...

  10. Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For

    nginx配置 首先,一个请求肯定是可以分为请求头和请求体的,而我们客户端的IP地址信息一般都是存储在请求头里的.如果你的服务器有用Nginx做负载均衡的话,你需要在你的location里面配置X-R ...

最新文章

  1. 刷了几千道算法题,我私藏的刷题网站都在这里了
  2. Nature子刊:宏基因组中挖掘原核基因组的分析流程
  3. 奇思妙想——我心中的智能自行车
  4. python的工资为什么这么低-Python为什么这么火 Python岗位薪资水平如何
  5. 如何证明服从卡方分布_概率论中的谁会证明(n-1)s^2/σ^2服从卡方分布
  6. [数学]点、线、面分割问题
  7. 虚拟机环境下ansible方式部署tidb3.0时系统检测不通过
  8. Python—json模块
  9. 最全的TCP面试知识点
  10. python爬虫教程-有什么好的python3爬虫入门教程或书籍吗?
  11. js中将html文档写入静态界面当中
  12. Vitamix和Blendtec破壁料理机哪个更高端?
  13. ubuntu系统firefox浏览器无法播放音视频
  14. proteus中验证串联电阻分压、并联电阻分流
  15. 计算机一级win7win10,win7升级win10数据是否会丢失?
  16. UiPath如何下载
  17. iOS之地图的使用和实时描绘运动轨迹
  18. python人脸识别opencv_python中使用Opencv进行人脸识别
  19. 多项式相加减【数据结构实验报告】
  20. 认认真真做事,踏踏实实做人

热门文章

  1. 《普林斯顿微积分读本》笔记-第2章三角学回顾
  2. 第一行代码android第三版pdf,第一行代码:Android PDF 下载
  3. java素数的判断方法_2java判断素数
  4. CSDN账号注销问题
  5. 遗传算法工具箱_含约束条件的遗传算法在连续催化重整优化操作中的应用
  6. 【Excel】数据透视表—简单数据分析实例
  7. H5互动游戏营销方案策划
  8. 娱乐先锋点歌系统服务器,娱乐先锋 K-LIVE 单机版安装和加歌说明.doc
  9. 姓名大战c语言,c语言姓名大作战游戏
  10. 软件工程理论与实践第二版吕云翔课后习题答案