在Java网站服务器中,要获取客户端的真实IP,一般有二种情况。
一、客户端直连服务器
如果客户端直接连接服务器这些情况时最简单了,直接使用HttpServletRequest
中的 getRemoteAddr();
方法就可以获取到客户端的真实IP了。
二、通过Nginx、Apache等转发
首先需要配置转发服务器,在Header中添加X-Forwarded-For参数。
Nginx配置
在nginx配置中,找到要转发的location中添加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
Apache配置
在http.conf添加配置
RemoteIPHeader x-forwarded-for
这样设定好转发之后,X-Forwarded-For的值为一个或多个ip,用’,’分割,每次转发都会将源ip添加到最后,只要取第一个ip值就是客户端的真实IP了。
java代码
将上次两种情况合并一下
public static String getIp(HttpServletRequest request) {
if (request == null){
return "";
}
String xForward = request.getHeader("X-Forwarded-For");
if (xForward == null) {
return request.getRemoteAddr();
}
String ip = "";
String[] ipArr = xForward.split(",");
if (ipArr.length > 0) {
ip = ipArr[0];
}
return ip;
}