使用Nginx,后端服务器获取客户端IP地址

项目背景

多个客户端通过一个路由器访问在外部搭建的服务器;类似下图

目的

服务器获取客户端真实IP

Nginx配置文件

java 复制代码
location /api {
				proxy_pass http://198.1.1.127:8099/mark;
				proxy_set_header X-Real-IP $remote_addr;
				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
				proxy_set_header Host $host;
		}

springboot后端接收

java 复制代码
 @RequestMapping("/getIpAddress")
    public String getIpAddress(@RequestHeader(value = "x-real-ip") String xRealIP,
    @RequestHeader(value = "x-forwarded-for") String xForwardedFor,
    HttpServletRequest request){
        String clientIp = request.getHeader("X-Real-IP");
        if (clientIp == null || clientIp.isEmpty()) {
            clientIp = request.getHeader("X-Forwarded-For");
            System.out.println("X-Forwarded-For:"+clientIp);
        }
        if (clientIp == null || clientIp.isEmpty()) {
            clientIp = request.getRemoteAddr();
            System.out.println("x-real-ip:"+clientIp);
        }
        
        return clientIp ;
    }

得到结果:

  • 通过测试,多个客户端获取的IP都与路由器IP相同,无法获取各客户端在路由器内部分配的真实IP

结论

  • 路由器访问外部网络时,会进行NAT(Network Address Translation,网络地址转换),NAT主要的作用是将内部网络中的私有IP地址转换为外部网络的公共IP地址,以便内部网络中的多个设备可以共享一个公共IP地址与外部网络通信。

提示

  • 按照上述配置,服务器部署在路由器内部时可以获取各客户端的真实IP。

因此本人暂时没找到合适方法获取路由器内部各客户端的真实IP,如有好方法,欢迎大家在评论提供,感谢!

相关推荐
智慧光迅AINOPOL4 小时前
园区全光网IP+POL架构怎么设计:组网拓扑与带宽演进
网络协议·tcp/ip·架构
老歌老听老掉牙5 小时前
WorkBuddy 如何接入 PrePoMax 的 MCP 服务器
服务器·ai·mcp
Linux_cy5 小时前
服务器管理工具哪个好用?我用了七八个
运维·服务器·javascript·python·ssh·面板·gmssh
缓慢更新5 小时前
审批的加签与会签:多人意见怎么合
android·java·数据库·低代码·rxjava
yuniko-n6 小时前
【JUC】volatile 非原子性深入解析
java
TechWayfarer7 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
sun_weitao7 小时前
极简版 MCP 工具实现方案
java·linux·服务器
金銀銅鐵8 小时前
[Java] 展示增删元素时 LinkedList 的内部变化
java·后端·ai编程
布吉岛的石头9 小时前
Java 程序员第 50 阶段3:数据工程:预训练语料清洗与去重
java·开发语言·人工智能·深度学习·transformer
大文说跨境9 小时前
防关联浏览器的指纹覆盖到什么程度:六类参数的实测与自检方法
java·指纹浏览器·tiktok运营