CDN回源鉴权配置,防止恶意直接访问源站
很多站长接入 CDN 后以为源站就安全了,实际上只要源站 IP 泄露,攻击者就能绕过 CDN 直接访问,导致防护失效、流量被刷。
CDN 回源鉴权配置的核心思路是:让 CDN 节点回源时携带一个只有你和 CDN 知道的密钥,源站 Nginx 校验密钥通过才响应,否则直接返回 403。
这样即使源站 IP 暴露,恶意请求也拿不到真实内容。
先判断你是否需要做回源鉴权
如果你的网站已经接入 CDN,
但源站 IP 可能通过历史 DNS 记录、
邮件头、
SSL 证书透明度日志等途径泄露,
或者你经常看到源站日志里有大量非 CDN 节点 IP 的直接请求,
那就需要配置回源鉴权。
判断依据很简单:在源站 Nginx 日志里看访问 IP,如果出现和 CDN 节点网段无关的 IP 大量请求,说明源站正在被直连。
另一个信号是 CDN 控制台显示的回源流量远低于源站实际入流量。
准备条件:一台运行 Nginx 的服务器(本文以宝塔面板环境为例),CDN 控制台支持自定义回源请求头,能编辑 Nginx 配置文件。
生成回源密钥并配置 Nginx 校验
密钥相当于源站和 CDN 之间的暗号,建议用随机字符串,不要用简单单词。
在服务器上生成一个随机密钥:
openssl rand -hex 24
假设得到 a1b2c3d4e5f6...,先记下来,后面 CDN 控制台要用同一个值。
下面编辑源站 Nginx 配置文件。
宝塔面板路径是:网站 → 找到对应站点 → 设置 → 配置文件。
在 server 块内、location 之前加入校验逻辑。
关键点是:只校验来自 CDN 的回源请求,不影响普通用户访问。
set $cdn_auth 0;
if ($http_x_cdn_auth = "a1b2c3d4e5f6...") {
set $cdn_auth 1;
}
if ($cdn_auth = 0) {
return 403;
}
这段配置的意思是:请求头 X-CDN-Auth 的值必须等于你生成的密钥,否则直接返回 403。
注意:如果你还有其他合法回源方式(比如内网负载均衡),需要一并放行,否则会被误拦。
保存后重载 Nginx:
nginx -t && nginx -s reload
在 CDN 控制台设置回源请求头
登录 CDN 服务商控制台,找到回源配置或请求头设置。
不同厂商叫法不同,常见路径是:域名管理 → 回源配置 → 自定义回源 HTTP 请求头。
新增一条请求头:
- 参数名:
X-CDN-Auth - 参数值:
a1b2c3d4e5f6...(和源站配置完全一致)
保存后等待 CDN 配置生效,通常几分钟内全网生效。
此时用浏览器直接访问源站 IP,应该返回 403;
通过 CDN 域名访问,应该正常打开。
常见坑和排查方法
CDN 配置未生效就测试:刚保存回源请求头时,部分节点可能还在用旧配置,建议等 5 到 10 分钟再验证,否则会误判。
密钥不一致:源站和 CDN 的密钥必须完全一致,注意大小写和空格。
如果源站返回 403 但 CDN 域名也打不开,先检查两边的值是否一致。
宝塔面板保存后不生效:宝塔有时会缓存配置文件,建议在面板里点“重载配置”或手动执行 nginx -s reload,并用 nginx -t 确认语法无误。
误拦搜索引擎蜘蛛:如果蜘蛛直接回源,会被 403 拦截。
建议在 Nginx 校验逻辑里对主流搜索引擎 IP 段放行,或者让蜘蛛也走 CDN 回源。
只加请求头不校验:有些站长只在 CDN 加了请求头,源站没做校验,这样等于没配。
两边必须同时改。
验证回源鉴权是否真正生效
验证分两步。
第一步,用 curl 直接请求源站 IP,不带请求头:
curl -I http://你的源站IP
预期返回 403 Forbidden。
第二步,带正确请求头再请求:
curl -I -H "X-CDN-Auth: a1b2c3d4e5f6..." http://你的源站IP
预期返回 200 OK。
第三步,通过 CDN 域名正常访问网站,页面能打开、图片能加载,说明回源链路正常。
如果三步都符合预期,回源鉴权就配置成功了。
之后定期检查源站日志,确认没有大量非 CDN IP 的直接请求,就说明防护持续有效。
几个容易忽略的细节
回源鉴权只解决“谁可以回源”的问题,不替代 WAF 和 CC 防护。
如果攻击者通过 CDN 发起大量请求,仍然需要 CDN 侧的防护策略。
密钥要定期更换,尤其是人员变动或怀疑泄露时。
更换时先改 CDN 再改源站,或者两边同时改,避免中间出现 403 窗口。
如果你使用多个 CDN 或主备回源,每个回源请求头都要覆盖到,否则备用线路会失效。
最后,源站防火墙可以进一步限制只允许 CDN 节点 IP 段访问 80 和 443 端口,和回源鉴权形成双重保险。
不过 CDN 节点 IP 段会变动,建议以服务商官方文档为准,不要写死过期网段。