Java無(wú)法獲取真實(shí)IP解決方案
問(wèn)題
最近在寫(xiě)博客瀏覽量的時(shí)候,設(shè)計(jì)了這么一個(gè)邏輯:同一個(gè)IP瀏覽一遍文章,5分鐘內(nèi)不刷新次數(shù)。就需要在服務(wù)器端得到用戶的真實(shí)IP,我代碼是這樣寫(xiě)的(從網(wǎng)上找的方法):
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;}
發(fā)現(xiàn)得到的IP總172開(kāi)頭的IP,我查了下是本地局域網(wǎng)的IP,我的項(xiàng)目又是docker布署的,這又記我聯(lián)想到docker內(nèi)部的IP。。。
解決辦法
最后才發(fā)現(xiàn)nginx代理接口的時(shí)候,需要做獲取IP的配置
location ^~ /api { proxy_pass http://127.0.0.1:8110/; proxy_read_timeout 90; #得到請(qǐng)求真實(shí)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;}
加上面面的配置,問(wèn)題解決!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解CSS偽元素的妙用單標(biāo)簽之美2. 詳解JSP 內(nèi)置對(duì)象request常見(jiàn)用法3. SpringMVC+Jquery實(shí)現(xiàn)Ajax功能4. ASP 連接Access數(shù)據(jù)庫(kù)的登陸系統(tǒng)5. 詳解瀏覽器的緩存機(jī)制6. jsp實(shí)現(xiàn)textarea中的文字保存換行空格存到數(shù)據(jù)庫(kù)的方法7. Jsp中request的3個(gè)基礎(chǔ)實(shí)踐8. IE6/IE7/IE8/IE9中tbody的innerHTML不能賦值的完美解決方案9. 解析原生JS getComputedStyle10. jsp EL表達(dá)式詳解
