Java獲取不到請求的真實IP


問題

最近在寫博客瀏覽量的時候,設計了這么一個邏輯:同一個IP瀏覽一遍文章,5分鍾內不刷新次數。就需要在服務器端得到用戶的真實IP,我代碼是這樣寫的(從網上找的方法):

public static String getRealIp(HttpServletRequest request) {
	String ip = request.getHeader("x-forwarded-for");
	String unknown = "unknown";
	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.getHeader("HTTP_CLIENT_IP");
	}
	if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
		ip = request.getHeader("HTTP_X_FORWARDED_FOR");
	}
	if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
		ip = request.getRemoteAddr();
	}
	return ip;
}

發現得到的IP總172開頭的IP,我查了下是本地局域網的IP,我的項目又是docker布署的,這又記我聯想到docker內部的IP。。。

解決辦法

最后才發現nginx代理接口的時候,需要做獲取IP的配置

location ^~ /api {
    proxy_pass http://127.0.0.1:8110/;
    proxy_read_timeout  90;
    #得到請求真實IP
    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_redirect      default;

}

加上面面的配置,問題解決!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM