首页 / 美国服务器 / 正文
Nginx反向代理下如何获取CDN背后的真实IP?运维小哥的血泪踩坑指南

Time:2025年03月24日 Read:4 评论:0 作者:y21dr45

作为一名常年与服务器斗智斗勇的运维打工人(别问头发还剩多少),今天必须和大家唠唠这个看似简单实则暗藏玄机的问题——当你的网站套了CDN之后,如何在Nginx日志里看到用户的真实IP?这简直是每个站长都会遇到的"薛定谔的IP"谜题!

Nginx反向代理下如何获取CDN背后的真实IP?运维小哥的血泪踩坑指南

一、当你的服务器开始"睁眼说瞎话"

想象一下这个场景:你刚给电商网站上了某云CDN服务(内心OS:这下加载速度不得起飞咯~),结果查看访问日志时突然发现——所有来访客户都变成了"熟悉的陌生人",清一色显示着CDN节点的IP地址!

![崩溃程序员表情包](https://example.com/崩溃.jpg)

这时候你才惊觉:原来用了CDN后就像给服务器戴了墨镜!所有请求都经过CDN节点转发(相当于中间商赚差价),而你的服务器看到的自然只是中间商的马甲IP。

二、HTTP头里的"套娃游戏"

这里必须祭出网络界的经典头字段——X-Forwarded-For(简称XFF)。这个字段就像快递单上的运输记录:

```

X-Forwarded-For: 客户端真实IP, CDN节点1 IP, CDN节点2 IP...

举个栗子🌰:

当用户(1.1.1.1)访问套了三层CDN的网站时:

1. 第一跳CDN记录:XFF: 1.1.1.1

2. 第二跳追加记录:XFF: 1.1.1.1, 2.2.2.2

3. 第三跳继续追加:XFF: 1.1.1.1, 2.2.2.2, 3.3.3.3

但默认情况下我们的nginx.conf配置是这样的青铜段位:

```nginx

log_format main '$remote_addr - $remote_user [$time_local] "$request"';

于是你看到的$remote_addr永远都是最后一层代理的IP(说好的客户真实信息呢摔!)

三、进阶操作:让nginx开启"火眼金睛"

是时候展现真正的技术了!请跟着我修改nginx配置:

Step 1:升级日志格式

log_format realip_log '$http_x_forwarded_for - $remote_addr - $time_local';

这样就能在日志里同时看到XFF头和传统remote_addr啦~

Step 2:安装realip模块(划重点!)

在编译nginx时加上--with-http_realip_module参数(云服务商提供的镜像一般已包含)

然后在server段添加:

set_real_ip_from 0.0.0.0/0;

生产环境请替换为实际CD商IP段

real_ip_header X-Forwarded-For;

real_ip_recursive on;

这三个指令堪称黄金搭档:

- `set_real_ip_from`:指定可信代理IP(就像给快递员发工作证)

- `real_ip_header`:指定从哪个头取真实IP

- `real_ip_recursive`:开启递归查找模式

举个实战案例🌰:

假设收到请求头:

X-Forwarded-For: 192.168.1.100, 10.0.0.5, 203.0.113.45

而203开头的IP是已知的CDN节点:

set_real_ip_from 203.0.113.45;

这时$remote_addr就会自动变成192开头的真实用户IP!

四、资深玩家的防翻车指南

你以为这就完了?Too young!这些坑我当年都栽过:

🕳️坑点一:信任链配置错误

某次我把set_real_ip_from设成了自家内网地址...结果所有外部请求都被当成代理请求处理(领导看监控时的表情管理已失控)

✅正确姿势:

通过dig命令查询CDN服务商提供的节点域名:

```bash

dig @8.8.8.8 cdn.yourprovider.com +short

🕳️坑点二:多层代理引发的血案

当你的架构是 [用户] → [云WAF] → [CDN] → [服务器],这时候XFF头会变成:"用户IP, WAF IP, CDN IP"

解决方案:

real_ip_recursive on;

开启递归模式会从右往左排除已知代理地址

🕳️坑点三:遭遇伪造攻击

曾有黑客伪造XFF头进行DDoS攻击:"X-Forwarded-For: 8个G的随机IP"

防御方案:

map $http_x_forwarded_for $real_client_ip {

~^([^,]+) $1;

}

limit_req_zone $real_client_ip zone=req_limit:10m rate=10r/s;

五、终极验证大法

部署完成后怎么确认配置生效?试试这几个组合技:

① curl测试法:

curl -H "X-Forwarded-For: test.client.ip" http://yourdomain.com/

② nginx变量检查:

location /showip {

return 200 "$remote_addr\n";

③ tcpdump抓包大法:

tcpdump -i eth0 port 80 -nnvvXSs 0 | grep "X-Forwarded"

【知识点总结】一张表搞定配置差异

| 场景类型 | nginx配置要点 | XFF头示例 |

|------------|----------------------------------|---------------------------|

|直连无代理 |无需特殊配置 |空值 |

|单层CDN |设置第一个可信代理 |用户真实IP, CD节点 |

|多层防护 |设置多个可信源+递归模式 |用户真实IP,WAF IP, CD节点 |

最后送大家一句运维箴言:"配反向代理一时爽,没配真实IP火葬场"。下次遇到登录异常、CC攻击找不到源头时...记得回来看看这篇避坑指南哦~

TAG:nginx cdn 真实ip,nginx real ip,nginx和cdn,nginx incloud

标签:
排行榜
关于我们
「好主机」服务器测评网专注于为用户提供专业、真实的服务器评测与高性价比推荐。我们通过硬核性能测试、稳定性追踪及用户真实评价,帮助企业和个人用户快速找到最适合的服务器解决方案。无论是云服务器、物理服务器还是企业级服务器,好主机都是您值得信赖的选购指南!
快捷菜单1
服务器测评
VPS测评
VPS测评
服务器资讯
服务器资讯
扫码关注
鲁ICP备2022041413号-1