`

负载均衡时获取用户真实IP

阅读更多
正常情况下,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
分享到:
评论

相关推荐

    获取用户真实IP地址

    值得注意的是,如果你的应用托管在云服务提供商(如AWS、Google Cloud或Azure)上,它们可能提供了API或配置选项来获取用户的真实IP,这通常涉及到配置负载均衡器或CDN服务。 在某些场景下,例如处理内网访问或者...

    java获取用户真实ip

    在探讨如何通过Java获取用户的真实IP地址之前,我们先来了解一下为什么这是一项重要的任务。在Web开发中,了解客户端的IP地址对于统计访问来源、安全验证(如防止恶意攻击)、地理定位等功能至关重要。然而,由于...

    java socket 用户真实IP测试

    当涉及到通过代理服务器或者负载均衡器(如Nginx)进行TCP转发时,获取用户的真实IP地址可能会变得复杂。在标题“java socket nginx tcp转发 用户真实IP测试”中,主要探讨的是如何在Java的Socket连接中,通过Nginx...

    IIS日志中获取访客真实IP的解决方案

    然而,在使用负载均衡器(如HAProxy)的情况下,直接从后端服务器(例如运行IIS的服务器)的日志文件中获取客户端的真实IP可能会变得复杂,因为请求经过负载均衡器后,原始IP信息可能被更改或丢失。本文将详细介绍...

    nginx负载均衡后如何记录来访者IP访客IP浏览者的IP

    当用户发起请求时,请求首先到达Nginx服务器,Nginx再根据负载均衡策略选择一个合适的后端服务器进行转发。在这个过程中,原始的客户端IP(即用户IP)会被Nginx服务器的IP所取代。因此,后端服务器的日志中记录的IP...

    A10负载均衡配置手册

    客户端IP地址插入/替换功能可以帮助应用程序获取客户端的真实IP地址,这对于日志记录和安全审计至关重要。 **5.10 HTTP标头插入或删除** 此功能允许添加或删除HTTP标头,以便更好地控制HTTP通信。 **5.11 URL...

    CDN获取真实IP

    ### CDN获取真实IP 在互联网应用中,内容分发网络(Content Delivery Network,简称CDN)是一种广泛采用的技术,用于加速网站内容的加载速度、提高访问稳定性和安全性。然而,当用户通过CDN访问网站时,服务器接收...

    获取访问者真实的IP地址

    在现代Web应用开发过程中,获取客户端的真实IP地址是一项非常重要的功能。这不仅可以帮助我们分析用户行为、优化服务,还能用于安全防护,例如防止恶意攻击等场景。本文将详细介绍如何通过Java Web应用中的JSP技术...

    负载均衡原理与技术实现.doc

    客户端的请求首先发送到负载均衡设备,该设备根据预设的调度算法(如轮询、最少连接数、哈希等)选择一台真实的服务器,然后通过网络地址转换(NAT)将目标IP改写为实际服务器的IP,转发请求。响应时,负载均衡器再...

    GetIpAddress.rar_GetIPAddress_获取IP地址_获取真实IP

    另一方面,获取真实IP地址有时需要考虑到CDN(内容分发网络)和代理服务器的影响,因为它们可能会改变请求头中的IP信息。为了获取准确的地理位置信息,可能需要使用第三方IP库或API,例如MaxMind的GeoIP数据库或...

    PHP通过$_SERVER['REMOTE_ADDR']得到的是内网IP?如何才能获得客户的公网IP(真实IP地址).zip

    当我们使用PHP内置的全局数组`$_SERVER`中的`'REMOTE_ADDR'`来获取用户IP时,有时会发现它返回的是内网IP而非公网IP。这主要是由于网络环境和服务器设置的影响。下面我们将详细探讨这个问题以及解决方法。 首先,`$...

    asp.net获取访问者IP地址

    需要注意的是,如果在IIS服务器上运行,可能需要配置IIS以传递真实的IP地址,尤其是当使用反向代理或负载均衡时。 在处理IP地址时,还要注意隐私保护。根据欧盟的GDPR规定,IP地址可能被视为个人数据,因此在收集和...

    tencentyun#intlcloud-documents#负载均衡七层转发获取来访真实IP的方法_en1

    As Layer-4 cloud load balance (TCP protocol) can directly access the real IP add

    nginx扩展应用-获取真实IP.docx

    "nginx扩展应用-获取真实IP" 本文将详细介绍如何使用nginx扩展应用来获取访问者真实IP,主要是通过在七层上配置Apache服务器前端(负载均衡),将真实的IP放在X-Forwarded-For的字段里,然后在日志中记录真实IP地址...

    负载均衡服务器负载HTTP头部改写.pptx

    在场景一中,当AD设备单臂部署并执行HTTP应用负载时,服务器无法获取到客户端的真实IP,这在数据分析中可能是个问题。为了解决这个问题,可以利用HTTP头部的X-forwarded-for字段。X-forwarded-for字段通常用来记录...

    nginx 负载均衡与反向代理资源

    在Win7 64位系统上安装Nginx,可以利用其强大的负载均衡和反向代理功能,优化网站性能并提升可用性。** ### 一、Nginx的安装 1. **下载Nginx安装包**:首先,你需要从Nginx官方网站获取适用于Windows 64位系统的...

    idea,java获取ip地址

    当我们构建一个基于Servlet的Web应用程序时,有时需要获取访问用户的真实IP地址,这在处理用户请求、日志记录或者实现地理位置相关的功能时尤为关键。 Servlet是Java服务器端的一种组件,它扩展了Web服务器的功能,...

Global site tag (gtag.js) - Google Analytics