在使用nginx做代理時,服務端如果直接從 X-Forwarded-For 頭部獲取來源IP,將獲取到nginx所在的ip地址,而不是請求的真實ip地址。
如何獲取請求的真實IP地址
首先,在nginx配置中添加如下配置
server { listen 80; server_name www.wenki.info; #要訪問的域名 charset utf8; location / { proxy_pass http://server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
從nginx中將請求來源IP添加到代理請求頭部,然后使用命令重新加載配置
nginx -s reload
服務端使用以下代碼即可獲取請求主機真實IP地址
public static String realIP(HttpServletRequest request) { String xff = request.getHeader("x-forwarded-for"); if (xff != null) { int index = xff.indexOf(','); if (index != -1) { xff = xff.substring(0, index); } return xff.trim(); } return request.getRemoteAddr(); }
