获取客户端真实IP

在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;
    }
0%