nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

如题所述

/**
 * 获取访问者IP地址
 * <p>在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。</p>
 * <p>本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割)。</p>
 * <p>如果还不存在则调用Request.getRemoteAddr()。</p>
 * @param request
 * @return
 */
public static String getIp(HttpServletRequest request) {
String ip = request.getHeader("X-Real-IP");
if (ValidateUtil.isNotEmpty(ip) && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (ValidateUtil.isNotEmpty(ip) && !"unknown".equalsIgnoreCase(ip)) {
int index = ip.indexOf(",");
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
} else {
return request.getRemoteAddr();
}
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-11-28
proxy_redirect off;
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.conf文件,找到类似配置项,核对一下是否有以上几个配置,以上配置中第2、3两行是解决你的问题的配置。

加入这两行,在java中就可以通过request.getRemoteHost()或其它方法取到客户端用户的入站IP,否只能取nginx服务器的ip。本回答被提问者采纳
第2个回答  2016-11-28
要想取得真正的地址。hedaer

nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP
址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等 反向代理软件就不能获取到客户端的真实IP地址了。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。param request return \/ pub...

Java面试-如何获取客户端真实IP
首先,请求由客户端发出,分为请求头和请求体。客户端IP信息通常存在于请求头中。若服务器使用Nginx作为负载均衡,可以通过特定配置获取真实IP。Nginx配置中,关键在于理解X-Real-IP和X-Forwarded-For两个请求头。X-Real-IP代表原始客户端的IP地址,通过配置可以将其正确传递给后端服务器。在《实战nginx》...

Nginx配置反向代理,一篇搞定!
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

10. Nginx实现反向代理
注意2: 这种方法, 在多级代理的情况下, 并不能将客户端ip, 逐层的传给后端服务器, 而是需要利用$proxy_add_x_forwarded_for变量实现 注意3: 如果一定要使用proxy_set_header去传递客户端ip和每一层代理的ip地址, 那么需要在每一层nginx代理都开启proxy_set_header, 并且设置不同的自定义变量去引...

Nginx代理
反向代理多台服务器的情况:根据访问的路径跳转到不同端口的服务中配置要代理的服务器,然后nginx会自动匹配路径,将请求转发到对应的服务器 负载均衡:然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载...

nginx反向代理原理?
然后将从内部服务器上得到的响应返回给Internet上请求连接的客户。反向效果:对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。用户不需要知道目标服务器的地址,作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

一起来了解一下前后端联调以及nginx反向代理原理与配置吧
当前后端开发完成后,联调是关键环节,通过接口文档,前端根据约定的方式从服务器获取数据。难点在于跨设备调试,这时nginx反向代理就派上用场,它作为中间层,解决跨域问题,允许我们本地开发时通过访问本地服务器间接与远程后端服务通信。nginx的反向代理原理在于,它接收前端请求,转发至后端集群,实现负载...

正向代理、反向代理、负载均衡(转载)
这里提到的客户端发送的、Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则。所以将服务器接收到的请求按照规则分发的过程,称为负载均衡。负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载...

Nginx负载均衡大揭秘:轻松驾驭流量高峰,打造高性能网站新境界!_百度...
首先,我们需要准备一个演示环境,比如对Tomcat服务器进行调整,比如在Tomcat1的index.jsp中添加特定标识,便于区分不同服务器的响应。通过分别访问192.168.1.9:8080和192.168.1.10:8080,模拟用户流量。在Nginx配置中,我们通常会引用外部配置文件,以简化管理和维护。通过在\/data\/program\/nginx\/conf\/...

nginx配置说明
在Nginx的配置中,"upstream"块用于定义一组被代理的服务器地址,支持轮询、加权轮询、ip_hash、url_hash和fair(第三方)等负载均衡算法。默认情况下,Nginx采用轮询策略,按服务器权重分配请求。你可以通过设置权重来调整服务器间的负载分布,如ip_hash会确保同一客户端IP始终请求同一后端服务器。对于错误...

相似回答