JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

摘要:
1.JAVA获取客户端请求的当前网络IP地址:/***获取客户端所请求的当前IP地址:IP*@paramrequest*@return*/publicstaticStringgetIpAddress(HttpServletRequestrequest){StringipAddress=request.getHeader(“X-Real-IP”);//首先从nginx自定义配置获取if(ipAddress==null)

1. JAVA获取客户端请求的当前网络ip地址:

    /** 
     * 获取客户端请求的当前网络ip
     * @param request
     * @return 
     */  
    public static String getIpAddr(HttpServletRequest request){  
        String ipAddress = request.getHeader("X-Real-IP");//先从nginx自定义配置获取
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("x-forwarded-for");
        }
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
            ipAddress = request.getHeader("Proxy-Client-IP");  
        }  
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
            ipAddress = request.getHeader("WL-Proxy-Client-IP");  
        }  
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
            ipAddress = request.getRemoteAddr();
            if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
                //根据网卡取本机配置的IP
                InetAddress inet=null;
                try {
                    inet = InetAddress.getLocalHost();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }
                ipAddress= inet.getHostAddress();  
            }
        }
        //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
        if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
            if(ipAddress.indexOf(",")>0){
                ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
            }
        }
        return ipAddress;
    }

2. Nginx反向代理后获取客户端请求的真实IP

在nginx.conf配置文件中,配置:

proxy_set_header X-Real-IP           $remote_addr;

例如:

location /服务名称 {
     proxy_set_header X-Real-IP           $remote_addr;
     proxy_pass  http://xaserver/服务名称;
     client_max_body_size  1000m;
}

免责声明:文章转载自《JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇QDialog 模态对话框与事件循环(exec其实就是调用了show和eventLoop.exec)Quartz.Net系列(五):Quartz五大构件Job之JobBuilder解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx的反向代理缓存

假设有两台物理机,他们分属于不同的域名,以webgame的游戏运营商和开发商为例,运营商需要获取游戏中的排行数据,开发商为了过多对游戏服务器的请求,会在发起请求的机器上设置缓存(或是让运营商定时过来抓取一次数据) nginx设置web缓存,需要用到的相关指令: 1、proxy_cache 2、proxy_cache_path 3、proxy_cache_v...

naginx安装入门

一.nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。 nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。 nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,...

nginx反向代理+负载均衡+https

  A服务器(192.168.133.1)作为nginx代理服务器   B服务器(192.168.133.2)作为后端真实服务器 访问https://www.test.com请求从A服务器上反向代理到B服务器上 A服务器192.168.133.1的操作流程 1)编译安装nginx省略 2)配置nginx cd /usr/local/nginx/conf v...

code-server nginx 反向代理

这里根据官网所给出的配置项进行了简单修改,仅作参考 关于nginx配置项有不了解的可以看这里 反向代理配置内容 location / { proxy_pass http://127.0.0.1:8082; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade;...

ASP.NET Core的Kestrel服务器(转载)

Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。Kestrel支持以下功能: HTTPS 用于启用不透明升级的WebSockets 位于Nginx之后的高性能Unix sockets Kestrel 被.N...

Docker中使用Nginx反向代理配置说明

本文主要讲述在Docker中怎么配置Nginx 一、Docker中安装Nginx请参考:https://www.cnblogs.com/whereGo/p/13523597.html。 二、配置Nginx: 1、进入Nginx容器  docker exec -it nginx bash #进入nginx容器  2、容器里面需要安装Vim apt-...