防止未授权cdn回源访问的核心是只放行真实可信的回源请求,需通过map识别合法ua/ip、防火墙限制回源ip段、host与签名头双重校验、缓存锁及限流等多层机制协同拦截非法请求。

防止未授权 CDN 回源访问,核心不是“堵所有回源”,而是“只放行真实可信的回源请求”。Nginx 本身不自动区分回源和用户直连,必须靠多层识别与拦截机制协同生效。
识别并标记合法 CDN 回源请求
先让 Nginx 准确知道哪些请求是来自你所用 CDN 的节点:
- 用 map 指令基于
$http_user_agent或$remote_addr定义变量(如$is_cdn_origin),匹配 Cloudflare、阿里云、腾讯云等官方 UA 字符串或 IP 段 - 若 CDN 提供自定义 Header(如
X-Edge-Sign或X-Cdn-Origin),可直接用map $http_x_edge_sign $is_valid_sign做初步校验 - 避免仅依赖
X-Forwarded-For判断来源——它易伪造,必须配合set_real_ip_from限定可信代理段才安全
限制回源请求的来源 IP 范围
在系统防火墙层面做第一道硬隔离,比应用层更早拦截无效连接:
- 查清你所用 CDN 官方公布的回源 IPv4/IPv6 地址段(如 Cloudflare 的
173.245.48.0/20、2400:cb00::/32) - 用
iptables或nftables配置 INPUT 链:只允许这些网段访问 443/80 端口,其余一律DROP - 注意顺序:放行规则必须在拒绝规则之前;若源站还需运维访问,需单独放行管理员 IP 和端口
验证 Host 头与签名头双重校验
即使请求来自合法 IP,仍需防恶意构造的回源请求:
- 用 map 预定义合法 Host 白名单(如
cdn.example.com、origin.example.com),生成$is_valid_host - 在 server 块中结合
if ($is_valid_host = 0) { return 444; }拒绝非法 Host —— 444 比 403 更彻底,直接断连不发响应 - 若启用动态签名(如
X-Edge-Sign),源站需同步校验签名有效性与时效性,签名密钥不可硬编码在配置中,建议由外部服务或 Lua 模块动态验签
启用缓存锁与限流降低攻击面
对已通过识别的回源请求,仍需防并发击穿与资源耗尽:
- 开启
proxy_cache_lock on,配合proxy_cache_lock_timeout 10s,避免缓存未命中时大量请求穿透到上游 - 用
limit_req_zone对$remote_addr(已还原为 CDN 节点 IP)或$is_cdn_origin变量做限流,例如每秒最多 100 个回源请求 - 关闭回源请求的日志记录:
access_log /dev/null if=$is_cdn_origin;,减轻高并发下的 I/O 压力











