获取nginx客户端IP地址 Java request获取客户端ip,各种apach,nginx等代理后依然正确

Java request获取客户端ip,各种apach,nginx等代理后依然正确

在JSP,Java里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是,如果使用了反向代理软件Apache,Squid,nginx等后,就不能获取到客户端的真实IP地址了。

最近我便是在项目中遇到类似问题,客户端访问,由于web项目是有nginx代理的,得到的ip竟然是服务器的局域ip,并非客服端ip,经过强大的博客,我得到了以下方法,记录总结:

以下方法亲测可用,能获取代理(前)后客户端的ip地址:


  1. /**
  2. * TODO //获得客户端的ip地址
  3. * @param request
  4. * @return
  5. * @author yqwang
  6. * @date 2017年2月22日 下午3:55:40
  7. */
  8. public static String getRemortIP(HttpServletRequest request) {
  9. if (request.getHeader( "x-forwarded-for") == null) {
  10. return request.getRemoteAddr();
  11. }
  12. return request.getHeader( "x-forwarded-for");
  13. }
  14. /**
  15. * TODO //获得客户端的主机名
  16. * @param request
  17. * @return
  18. * @author yqwang
  19. * @date 2017年2月22日 下午3:55:27
  20. */
  21. public static String getRemoteHost(javax.servlet.http.HttpServletRequest request) {
  22. String ip = request.getHeader( "x-forwarded-for");
  23. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  24. ip = request.getHeader( "Proxy-Client-IP");
  25. }
  26. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  27. ip = request.getHeader( "WL-Proxy-Client-IP");
  28. }
  29. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  30. ip = request.getRemoteAddr();
  31. }
  32. return ip.equals( "0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
  33. }

在JSP,Java里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是,如果使用了反向代理软件Apache,Squid,nginx等后,就不能获取到客户端的真实IP地址了。

最近我便是在项目中遇到类似问题,客户端访问,由于web项目是有nginx代理的,得到的ip竟然是服务器的局域ip,并非客服端ip,经过强大的博客,我得到了以下方法,记录总结:

以下方法亲测可用,能获取代理(前)后客户端的ip地址:


  1. /**
  2. * TODO //获得客户端的ip地址
  3. * @param request
  4. * @return
  5. * @author yqwang
  6. * @date 2017年2月22日 下午3:55:40
  7. */
  8. public static String getRemortIP(HttpServletRequest request) {
  9. if (request.getHeader( "x-forwarded-for") == null) {
  10. return request.getRemoteAddr();
  11. }
  12. return request.getHeader( "x-forwarded-for");
  13. }
  14. /**
  15. * TODO //获得客户端的主机名
  16. * @param request
  17. * @return
  18. * @author yqwang
  19. * @date 2017年2月22日 下午3:55:27
  20. */
  21. public static String getRemoteHost(javax.servlet.http.HttpServletRequest request) {
  22. String ip = request.getHeader( "x-forwarded-for");
  23. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  24. ip = request.getHeader( "Proxy-Client-IP");
  25. }
  26. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  27. ip = request.getHeader( "WL-Proxy-Client-IP");
  28. }
  29. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  30. ip = request.getRemoteAddr();
  31. }
  32. return ip.equals( "0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
  33. }

猜你喜欢

转载自blog.csdn.net/qq_41040268/article/details/81044600
今日推荐