獲取nginx客戶端IP地址 Java request獲取客戶端ip,各種apach,nginx等代理後依然正確
阿新 • • 發佈:2018-11-27
Java request獲取客戶端ip,各種apach,nginx等代理後依然正確
2017年02月22日 17:15:15 閱讀數:3268在JSP,Java裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr() ,這種方法在大部分情況下都是有效的。但是,如果使用了反向代理軟體Apache,Squid,nginx等後,就不能獲取到客戶端的真實IP地址了。
最近我便是在專案中遇到類似問題,客戶端訪問,由於web專案是有nginx代理的,得到的ip竟然是伺服器的局域ip,並非客服端ip,經過強大的部落格,我得到了以下方法,記錄總結:
以下方法親測可用,能獲取代理(前)後客戶端的ip地址:
- /**
- * TODO //獲得客戶端的ip地址
- * @param request
-
* @return
- * @author yqwang
- * @date 2017年2月22日 下午3:55:40
- */
-
public static String getRemortIP
- if (request.getHeader( "x-forwarded-for") == null) {
- return request.getRemoteAddr();
- }
- return request.getHeader( "x-forwarded-for");
- }
- /**
- * TODO //獲得客戶端的主機名
- * @param request
- * @return
- * @author yqwang
- * @date 2017年2月22日 下午3:55:27
- */
- public static String getRemoteHost(javax.servlet.http.HttpServletRequest request) {
- String ip = request.getHeader( "x-forwarded-for");
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader( "Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader( "WL-Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getRemoteAddr();
- }
- return ip.equals( "0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
- }
在JSP,Java裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr() ,這種方法在大部分情況下都是有效的。但是,如果使用了反向代理軟體Apache,Squid,nginx等後,就不能獲取到客戶端的真實IP地址了。
最近我便是在專案中遇到類似問題,客戶端訪問,由於web專案是有nginx代理的,得到的ip竟然是伺服器的局域ip,並非客服端ip,經過強大的部落格,我得到了以下方法,記錄總結:
以下方法親測可用,能獲取代理(前)後客戶端的ip地址:
- /**
- * TODO //獲得客戶端的ip地址
- * @param request
- * @return
- * @author yqwang
- * @date 2017年2月22日 下午3:55:40
- */
- public static String getRemortIP(HttpServletRequest request) {
- if (request.getHeader( "x-forwarded-for") == null) {
- return request.getRemoteAddr();
- }
- return request.getHeader( "x-forwarded-for");
- }
- /**
- * TODO //獲得客戶端的主機名
- * @param request
- * @return
- * @author yqwang
- * @date 2017年2月22日 下午3:55:27
- */
- public static String getRemoteHost(javax.servlet.http.HttpServletRequest request) {
- String ip = request.getHeader( "x-forwarded-for");
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader( "Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader( "WL-Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getRemoteAddr();
- }
- return ip.equals( "0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
- }