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;}
加上面面的配置,問題解決!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章: