在開發的時候不少時候都須要獲取用戶IP地址,可是又有不少項目先後端分離,使用了Nginx代理……獲取不到用戶真實IPhtml
首先Nginx配置:web
server { listen 80; server_name localhost; charset utf-8; location / { root D:\Project\website\src\main\webapp\website; index index.html index.htm; } location ~ .*/api/* { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; } }
很簡單的配置你們應該懂得,只用加以下代碼便可:後端
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
JAVA代碼:api
public static String getIp(HttpServletRequest request) throws Exception{ String ip = request.getHeader("X-Real-IP"); if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { return ip; } ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { // 屢次反向代理後會有多個IP值,第一個爲真實IP。 int index = ip.indexOf(','); if (index != -1) { return ip.substring(0, index); } else { return ip; } } else { return request.getRemoteAddr(); } }