`

负载均衡时获取用户真实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 socket 用户真实IP测试

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

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

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

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

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

    asp.net获取访问者IP地址

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

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

    当我们使用PHP内置的全局数组`$_SERVER`中的`'REMOTE_ADDR'`来获取用户IP时,有时会发现它返回的是内网IP而非公网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服务器的功能,...

    阿里云负载均衡常见问题1

    - 阿里云有权在无通知的情况下更新负载均衡服务的文档和功能,因此建议定期通过官方渠道获取最新的用户文档。在进行产品升级或调整时,可能会有服务中断的风险,因此需要规划好维护窗口,并遵循最佳实践,如使用...

    获取客户端IP地址所需Jar包

    然而,在某些情况下,如通过反向代理服务器(如Nginx、Apache)或负载均衡器访问时,这个方法可能返回的是代理服务器的IP而非客户端的真实IP。这时,我们需要检查X-Forwarded-For头部,该头部通常包含了客户端的IP...

    java IP地址工具类,java IP地址获取,java获取客户端IP地址

    这是因为如果请求经过了代理或负载均衡器,IP地址可能不是直接来自客户端,而是最后一个代理。 3. **IP地址转换**:工具类可能还包含了IP字符串与`InetAddress`对象之间的转换,以及IPv4和IPv6之间的转换功能。 4....

    (阿里云负载均衡)或者 lvs+Tengine(nginx)+lua防护攻击:线上正式使用,可以修改lua达到自己想要效果

    (阿里云负载均衡)或者 lvs+...记得修改以下获取真实ip function getClientIp() IP = ngx.var.http_x_forwarded_for or ngx.var.remote_addr or "0.0.0.0" if IP == nil then IP = "unknown" end return IP end

    阿里云-负载均衡服务最佳实践参考-D.docx

    以上就是阿里云负载均衡服务的最佳实践,包括健康检查异常的排查和获取真实IP的方法。通过遵循这些实践,用户可以更有效地管理和优化其在阿里云上的负载均衡配置,提升应用的稳定性和性能。在遇到问题时,也可以参照...

    PHP 获取客户端IP

    在这种情况下,可以尝试使用其他`$_SERVER`变量来获取真实的客户端IP: 1. `$_SERVER['HTTP_CLIENT_IP']`: 如果HTTP_X_FORWARDED_FOR头被设置,这个变量可能包含客户端IP。 2. `$_SERVER['HTTP_X_FORWARDED']`: ...

    php 获取ip所在区域实例

    同时,需要注意的是,IP到地理位置的映射并不总是100%准确,因为某些IP地址可能属于ISP而不是最终用户,或者被负载均衡器和代理服务器所混淆。为了更精确的结果,开发者可能会考虑使用第三方API,如Google Maps ...

    软路由ROS固定IP、adsl双线NTH负载均衡借鉴.pdf

    软路由ROS固定IP、adsl双线NTH负载均衡借鉴 本文主要介绍了如何使用RouterOS实现软路由固定IP、adsl双线NTH负载均衡。实验环境中,我们使用了三台RouterOS设备和一台WinXP虚拟机,分别配置了不同的网络连接。 首先...

Global site tag (gtag.js) - Google Analytics