千家信息网

nginx实现负载CDN加速获取端真实ip的方法

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关nginx实现负载CDN加速获取端真实ip的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。nginx做负载CDN加速获取端真实ip在
千家信息网最后更新 2026年11月03日nginx实现负载CDN加速获取端真实ip的方法

这篇文章将为大家详细讲解有关nginx实现负载CDN加速获取端真实ip的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

nginx做负载CDN加速获取端真实ip
在不用cdn的情况下,nginx做负载获取真实ip时,nginx配置如下:
Java代码

proxy_set_header        Host            $host;  proxy_set_header        X-Real-IP       $remote_addr;  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

然后后端服务器获取ip代码:
Java代码

String address = request.getHeader("X-Forwarded-For");  if (address != null && address.length() > 0          && !"unknown".equalsIgnoreCase(address)) {      return address;      }  address = request.getHeader("Proxy-Client-IP");  if (address != null && address.length() > 0          && !"unknown".equalsIgnoreCase(address)) {      return address;  }  address = request.getHeader("WL-Proxy-Client-IP");  if (address != null && address.length() > 0          && !"unknown".equalsIgnoreCase(address)) {      return address;  }  return request.getRemoteAddr();


这样就能获取到真实的IP,服务器测试一下:
不加cdn,获取得IP:123.116.126.51(我当前客户端机器的真实IP)
然后加上加了cdn后,后去到的IP:123.116.126.51, 202.108.251.166(hosts指向cdn的ip)
即:client 真实IP,代理IP,google之,
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项 。
标准格式如下:

X-Forwarded-For: client1, proxy1, proxy2

从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。
当Nginx设置X-Forwarded-For等于$proxy_add_x_forwarded_for后会有两种情况发生
1、如果从CDN过来的请求没有设置X-Forwarded-For头(通常这种事情不会发生),而到了我们这里Nginx设置将其设置为$proxy_add_x_forwarded_for的话,X-Forwarded-For的信息应该为CDN的IP,因为相对于Nginx负载均衡来说客户端即为CDN,这样的话,后端的web程序时死活也获得不了真实用户的IP的。
2、CDN设置了X-Forwarded-For,我们这里又设置了一次,且值为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的内容变成 "客户端IP,CDN的ip"如果是这种情况的话,那后端的程序通过X-Forwarded-For获得客户端IP,则取逗号分隔的第一项即可。
这个比较头疼,如果只想获取客户端真实ip,那么只能修改我们后端代码,如果有多个,那么取第一个。这不是我想要的,
那么怎么样才能不修改就能真实IP呢?
Nginx中还有一个$http_x_forwarded_for变量,这个变量中保存的内容就是请求中的X-Forwarded-For信息。如果后端获得X-Forwarded-For信息的程序兼容性不好的话(没有考虑到X-Forwarded-For含有多个IP的情况),最好就不要将X-Forwarded-For设置为 $proxy_add_x_forwarded_for。应该设置为$http_x_forwarded_for或者干脆不设置!
上面这段话的意思是我们不加 $proxy_add_x_forwarded_for, 但是这样不在cdn的情况下去会取不到真实IP,有没有一个两全齐美的方法呢?
经过几种配置之后,发现做如下配置:
Java代码

proxy_set_header X-Forwarded-For  $http_x_forwarded_for;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

这样配置第一次获取 $http_x_forwarded_for,如果不存在,那么获取$proxy_add_x_forwarded_for。
这样不管是否在cdn环境,都可以获得一个客户端IP。
(注:多层代理未测试)

关于"nginx实现负载CDN加速获取端真实ip的方法"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

客户 客户端 代码 情况 信息 代理 配置 方法 均衡 内容 多个 服务器 程序 篇文章 服务 变量 就是 更多 标准 格式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 互联网科技产业 新华互联网科技学校 互联网科技未来 互联网医疗科技 互联网 科技创新 深圳互联网络科技有限公司 互联网科技公司怎么样 世界互联网领先科技成果 中盈科技互联网信息有限公司 宁波青枫互联网科技有限公司 互联网科技项目计划书材料类 注册互联网科技公司经营范围大全 恒生互联网科技业指数调整周期 山东子淼互联网科技有限公司 互联网企业科技类企业如何做账 启辰互联网科技 2021世界互联网领先科技成果发布 互联网金融运营模式中的金融科技 科技互联网专业工作会议发言稿 互联网科技巨头监管 互联网与未来科技 西安互联网科技公司 江苏南京365互联网科技 阿里巴巴算科技企业还是互联网 互联网大会黑科技排名 黑科技 体验场景 互联网大会 互联网公司高科技产品 云鲸互联网络科技有限公司 广州智享互联网科技
0