首先nginx的配置需要开启传递来源ip,
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
重要的是第二行,$remote_addr.
可配置在server中,也可单独配置在某个程序中,
如:
location /cpcn/ {
proxy_pass http:`
//localhost:8082;`
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
或者写在server中
server {
listen
8080`
;`
server_name localhost;
port_in_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
IPUtil工具类:
package test;
import javax.servlet.http.HttpServletRequest;
public class IPUtil {
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
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();
}
System.out.println("IP:"+ip);
return ip;
}
}
附录:
通过UC访问得到的头信息内容
-----------------------------------------------------
host:xabc.yf2017.top:8080
x-real-ip:123.150.182.23
x-forwarded-for:124.205.118.114, 123.150.182.23
connection:close
accept-encoding:gzip
accept-language:zh-CN
accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8,UC/145,plugin/1,alipay/en
x-ucbrowser-ua:dv(MI 4W);pr(UCBrowser/10.10.8.822);ov(Android 6.0.1);ss(360*640);pi(1080*1920);bt(UC);pm(1);bv(1);nm(0);im(0);sr(0);nt(2);
user-agent:Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; MI 4W Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.10.8.822 U3/0.8.0 Mobile Safari/534.30
clientip:124.205.118.114
cookie:_ga=GA1.2.136101778.1465853445; BAEID=4FD76B483B836FF0D12725A4737251BB; JSESSIONID=FBCCB146EADCD62C8CE0AEEDEA3C447A
cache-control:max-age=0
-----------------------------------------------------
IP:124.205.118.114, 123.150.182.23
所以最好再加上是否包含逗号的判断,如果包含逗号,取第一个值。