通過nginx反向代理,java獲取ip地址時,總是127.0.0.1。是因為nginx請求的時候沒有帶有request信息,設置nginx轉發的時候,帶上request的信息就可以了。代碼如下:
Java代碼:
/** * 獲取Ip地址 * * @param request * @return */ private static String getIpAdrress(HttpServletRequest request) { String Xip = request.getHeader("X-Real-IP"); String XFor = request.getHeader("X-Forwarded-For"); if (StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) { //多次反向代理后會有多個ip值,第一個ip才是真實ip int index = XFor.indexOf(","); if (index != -1) { return XFor.substring(0, index); } else { return XFor; } } XFor = Xip; if (StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) { return XFor; } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("Proxy-Client-IP"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getRemoteAddr(); } return XFor; }
nginx代碼:
location / { proxy_pass http://127.0.0.1:5001/; #以下為加入的代碼信息 proxy_set_header x-forwarded-for $remote_addr; }
加入以上代碼后,重新加載nginx配置文件,重新登錄應該就可以了。