nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP相关的知识,希望对你有一定的参考价值。
首先,在前端nginx上需要做如下配置:location /
proxy_set_hearder host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
;
nginx会在把请求转向后台real-server前把http报头中的ip地址进行替换;这样操作完成后,real-server也需要做一些操作;
public class ClientIPUtils
/**
* 在很多应用下都可能有需要将用户的真实IP记录下来,这时就要获得用户的真实IP地址,在JSP里,获取客户端的IP地
* 址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等
* 反向代理软件就不能获取到客户端的真实IP地址了。
* 但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。
* @param request
* @return
*/
public static String getClientIp(HttpServletRequest request)
String ip = request.getHeader("x-forwarded-for");
//String ip = request.getHeader("X-real-ip");
logger.debug("x-forwarded-for = ", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
logger.debug("Proxy-Client-IP = ", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP");
logger.debug("WL-Proxy-Client-IP = ", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
logger.debug("RemoteAddr-IP = ", ip);
if(StringUtils.isNotBlank(ip))
ip = ip.split(",")[0];
return ip;
参考技术A 首先,在前端nginx上需要做如下配置:
location /
proxy_set_hearder host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
;
nginx会在把请求转向后台real-server前把http报头中的ip地址进行替换;这样操作完成后,real-server也需要做一些操作;
public class ClientIPUtils
/**
* 在很多应用下都可能有需要将用户的真实IP记录下来,这时就要获得用户的真实IP地址,在JSP里,获取客户端的IP地
* 址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等
* 反向代理软件就不能获取到客户端的真实IP地址了。
* 但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。
* @param request
* @return
*/
public static String getClientIp(HttpServletRequest request)
String ip = request.getHeader("x-forwarded-for");
//String ip = request.getHeader("X-real-ip");
logger.debug("x-forwarded-for = ", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
logger.debug("Proxy-Client-IP = ", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP");
logger.debug("WL-Proxy-Client-IP = ", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
logger.debug("RemoteAddr-IP = ", ip);
if(StringUtils.isNotBlank(ip))
ip = ip.split(",")[0];
return ip;
LVS四层 VS Nginx七层反代(负载均衡)
1、场景:最近不少朋友聊天谈到面试总是问到LVS四层反代和Nginx七层反代,有点不知所措。
负载均衡可以将用户的请求分发到 web集群的某台机器,反向代理也是实现了这个功能。如果后端是一台服务器就叫反向代理,如果有多台就是负载均衡。反向代理才能实现负载均衡 负载均衡是做反向代理的目的之一。
2、博主则探讨一下四层反代和的七层反代的区别(三层负载均衡不探讨),如有不足,请指出。
3、问到LVS四层、七层反代(负载均衡),则可以通过上面几个方式谈:
3.1)技术原理
3.2)优缺点
3.3)安全性
3.4)应用场景
3.5)工作原理
3.6)四层七层的选择
以上是关于nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP的主要内容,如果未能解决你的问题,请参考以下文章