前言:在java代码中获取真实ip地址的代码如下所示

    /*** 获取客户端IP* * @param request 请求对象* @return IP地址*/public static String getIpAddr(HttpServletRequest request){if (request == null){return "unknown";}String ip = request.getHeader("x-forwarded-for");System.out.println("================1===>"+ip);if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("Proxy-Client-IP");System.out.println("================2===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("X-Forwarded-For");System.out.println("================3===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("WL-Proxy-Client-IP");System.out.println("================4===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("X-Real-IP");System.out.println("================5===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getRemoteAddr();System.out.println("================6===>"+ip);}System.out.println("================7===>"+getMultistageReverseProxyIp(ip));return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip);}

但实际上我的java项目是部署在docker容器上的,也就是说我将项目的jar包打成docker镜像在docker容器内进行启动。并且我还使用了nginx做了反向代理。那么每次获取的ip地址都是docker宿主机的ip地址而非我实际请求的ip地址。

总的请求路径就是:请求-->nginx-->docker容器-->java项目代码

解决:在nginx配置中将请求地址做些修改,如下

location /stage-api/ {proxy_pass http://xxx:xx/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

也就是在server下配置的反向代理中增加了

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已经获取就是真实的ip了。

记一次:java获取真实ip地址问题相关推荐

  1. Java获取真实Ip地址

    目录 一.工具类代码 二.ip伪造解决 一.工具类代码 /*** 获取Ip** @param request 请求*/public static String getIpRequest(HttpSer ...

  2. 老大说,网上这种获取真实IP地址的方法不对,我不信...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:蔡永吉  来源:http://bit.ly/33H8RMm ...

  3. 502 proxy error解决方法_老大说,网上这种获取真实IP地址的方法不对,我不信......

    作者:蔡永吉  来源:http://bit.ly/33H8RMm想必大家对这段代码并不陌生: public String getIpAddr(HttpServletRequest request) { ...

  4. java获取真实ip的方法

    在网络中,如果不想被人监听,那么就需要获取 IP地址了,在电脑中我们可以使用到 ip地址获取工具,那么如何在 Java中获取真实的 IP地址呢? 1.首先我们需要先准备一台电脑,然后将电脑进行联网: ...

  5. 获取项目服务器ip,java获取服务器ip地址

    java获取服务器ip地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的I ...

  6. nginx反向代理后,java获取真实ip和解决request.getServerName()的问题

    1. nginx.conf的server下增加以下配置 #解决request.getServerName()的问题proxy_set_header Host $host:$server_port;pr ...

  7. JAVA获取主机IP地址

    JAVA获取主机IP地址 java 获取主机IP地址工具类 import org.springframework.web.context.request.RequestAttributes; impo ...

  8. java获取网络ip地址_Java获取电脑真实IP地址的示例代码

    /** * @author yins * @date 2018年8月12日下午9:53:58 */ import java.net.Inet4Address; import java.net.Inet ...

  9. Java 获取主机ip地址(ipv4)

    在java 应用中, 有时需要获取应用所在服务器的ip地址, 比如说利用Zookeeper 做动态节点上下线时. java 提供了InetAddress 类来获取主机ip地址, 但是使用的时候需要注意 ...

最新文章

  1. vc++获取的蓝牙设备信息中rssi的值_Android低功耗蓝牙总结
  2. 什么是防火墙?—Vecloud微云
  3. CF981H K Paths
  4. 高精度算法(加减乘除取模(均可以处理负数))
  5. 畅通工程,How Many Tables ACM第九天-图论
  6. 解决SQL单用户模式不能转为多用户模式
  7. 2019第10周知识总结
  8. zlib1.2.5的编译
  9. 工作185:解决vue+el-element二级联动,选项选择后不显示的问题
  10. php mvc 逻辑层在哪,mvc的业务逻辑应该放哪里?
  11. wetech-cms内容管理系统源码
  12. oopc——4.继承
  13. java数组给名字排序_用Java给数组排序
  14. DataGridView常用操作
  15. OpenStack Networking – FlatManager and FlatDHCPManager
  16. 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
  17. iic调试软件上时钟芯片测试,时钟芯片的测试方法和系统 Clock chip testing methods and systems...
  18. java加密不可逆,32位不可逆加密算法Java实现
  19. 【C补充】qsort函数 —— 数组元素排序
  20. (附源码)ssm教材管理系统 毕业设计 011229

热门文章

  1. HP DL380 G9 配置RAID
  2. ubuntu14.1安装腾讯通rtx,企业必备。
  3. VIRTINS Multi-Instrument虚拟示波器HANTEK6022插件说明
  4. 144hz刷新率到底有多快?看看这两款电竞屏就知道了
  5. 小猫统计——快速数据统计专家介绍
  6. 不比不知道,主流商业云计算解决方案大比拼!
  7. 答疑丨北京积分落户,职住已加6分,还能加分吗?
  8. PostGre使用总结
  9. linux 解压zip大文件(解决乱码问题)
  10. EDIUS设置3D转场的方法