反向代理后服务器获取不了客户端IP

发布时间 2023-05-31 15:45:33作者: haowe

问题

HttpSevletRequest 的getRemoteAddr 方法不能获取到客户端的ip地址,显示的是127.0.0.1,这是代理服务器的部署地址

原因

因为经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端,但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

解决方法


        String requestIp = "";
        String xff = request.getHeader("x-forwarded-for");
        if (xff != null) {
            int index = xff.indexOf(',');
            if (index != -1) {
                xff = xff.substring(0, index);
            }
            requestIp = xff.trim();
        } else {
            requestIp = request.getRemoteAddr();   
        }