正常情况下,request请求获取用户IP的api为request.getRemoteAddr()
可是某些情况下,这不是正确答案
负载均衡时,获取的就是反向代理服务器的地址
要获取真实用户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;
};
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.slf4j.LoggerFactory;
public class RequestUtils {
private static org.slf4j.Logger logger = LoggerFactory.getLogger(RequestUtils.class);
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
logger.info("x-forwarded-for = {}", ip);
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
logger.info("Proxy-Client-IP = {}", ip);
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
logger.info("WL-Proxy-Client-IP = {}", ip);
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
logger.info("RemoteAddr-IP = {}", ip);
}
if(StringUtils.isNotBlank(ip)) {
ip = ip.split(",")[0];
}
return ip;
}
}
ps:日志格式化输出调用org.slf4j.Logger
参考:
nginx做反向负载均衡,后端服务器获取真实客户端ip
http://www.cnblogs.com/lhj588/p/4344354.html
分享到:
相关推荐
1. **负载均衡策略**:深信服AD设备可能采用了不同的负载均衡算法,如轮询、最少连接数、源IP哈希等,来决定将流量分配给哪个服务器。理解这些策略对于优化网络性能至关重要。 2. **网络协议**:负载均衡设备通常...
值得注意的是,如果你的应用托管在云服务提供商(如AWS、Google Cloud或Azure)上,它们可能提供了API或配置选项来获取用户的真实IP,这通常涉及到配置负载均衡器或CDN服务。 在某些场景下,例如处理内网访问或者...
在探讨如何通过Java获取用户的真实IP地址之前,我们先来了解一下为什么这是一项重要的任务。在Web开发中,了解客户端的IP地址对于统计访问来源、安全验证(如防止恶意攻击)、地理定位等功能至关重要。然而,由于...
当涉及到通过代理服务器或者负载均衡器(如Nginx)进行TCP转发时,获取用户的真实IP地址可能会变得复杂。在标题“java socket nginx tcp转发 用户真实IP测试”中,主要探讨的是如何在Java的Socket连接中,通过Nginx...
然而,在使用负载均衡器(如HAProxy)的情况下,直接从后端服务器(例如运行IIS的服务器)的日志文件中获取客户端的真实IP可能会变得复杂,因为请求经过负载均衡器后,原始IP信息可能被更改或丢失。本文将详细介绍...
当用户发起请求时,请求首先到达Nginx服务器,Nginx再根据负载均衡策略选择一个合适的后端服务器进行转发。在这个过程中,原始的客户端IP(即用户IP)会被Nginx服务器的IP所取代。因此,后端服务器的日志中记录的IP...
客户端IP地址插入/替换功能可以帮助应用程序获取客户端的真实IP地址,这对于日志记录和安全审计至关重要。 **5.10 HTTP标头插入或删除** 此功能允许添加或删除HTTP标头,以便更好地控制HTTP通信。 **5.11 URL...
### CDN获取真实IP 在互联网应用中,内容分发网络(Content Delivery Network,简称CDN)是一种广泛采用的技术,用于加速网站内容的加载速度、提高访问稳定性和安全性。然而,当用户通过CDN访问网站时,服务器接收...
在现代Web应用开发过程中,获取客户端的真实IP地址是一项非常重要的功能。这不仅可以帮助我们分析用户行为、优化服务,还能用于安全防护,例如防止恶意攻击等场景。本文将详细介绍如何通过Java Web应用中的JSP技术...
当我们使用PHP内置的全局数组`$_SERVER`中的`'REMOTE_ADDR'`来获取用户IP时,有时会发现它返回的是内网IP而非公网IP。这主要是由于网络环境和服务器设置的影响。下面我们将详细探讨这个问题以及解决方法。 首先,`$...
客户端的请求首先发送到负载均衡设备,该设备根据预设的调度算法(如轮询、最少连接数、哈希等)选择一台真实的服务器,然后通过网络地址转换(NAT)将目标IP改写为实际服务器的IP,转发请求。响应时,负载均衡器再...
另一方面,获取真实IP地址有时需要考虑到CDN(内容分发网络)和代理服务器的影响,因为它们可能会改变请求头中的IP信息。为了获取准确的地理位置信息,可能需要使用第三方IP库或API,例如MaxMind的GeoIP数据库或...
需要注意的是,如果在IIS服务器上运行,可能需要配置IIS以传递真实的IP地址,尤其是当使用反向代理或负载均衡时。 在处理IP地址时,还要注意隐私保护。根据欧盟的GDPR规定,IP地址可能被视为个人数据,因此在收集和...
As Layer-4 cloud load balance (TCP protocol) can directly access the real IP add
"nginx扩展应用-获取真实IP" 本文将详细介绍如何使用nginx扩展应用来获取访问者真实IP,主要是通过在七层上配置Apache服务器前端(负载均衡),将真实的IP放在X-Forwarded-For的字段里,然后在日志中记录真实IP地址...
在场景一中,当AD设备单臂部署并执行HTTP应用负载时,服务器无法获取到客户端的真实IP,这在数据分析中可能是个问题。为了解决这个问题,可以利用HTTP头部的X-forwarded-for字段。X-forwarded-for字段通常用来记录...
在Win7 64位系统上安装Nginx,可以利用其强大的负载均衡和反向代理功能,优化网站性能并提升可用性。** ### 一、Nginx的安装 1. **下载Nginx安装包**:首先,你需要从Nginx官方网站获取适用于Windows 64位系统的...