服务器怎么获取客户端ip地址?

新手上路,请多包涵

现在网站前端用vue写的,客户端访问服务器通过nginx转发到vue页面,vue页面再访问tomcat服务器,实际上是vue页面向tomcat发请求,这时,tomcat拿到的客户端的IP地址就是vue页面请求地址,最后拿到127.0.0.1。请问这种情况怎么拿到客户端的真实ip地址?

阅读 3.5k
2 个回答
一般nginx要获取真实ip需要location段加上
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拿到vue页面,然后vue页面再请求nginx,然后ngix将请求转发到tomcat,tomcat返回数据吗?vue直接透过nginx访问tomcat这样不好吧。

上面的大兄弟说了nginx的配置。我提供下java中获取ip地址代码,参考下:

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_X_FORWARDED_FOR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)||ip.startsWith("10.")) {  
            ip = request.getRemoteAddr();  
        }  
        return ip;  
    }  
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进