节点对请求和响应做了什么
节点回源时加了哪些请求头、给访客的响应带哪些头、下发哪些 Cookie、哪些路径由节点自己应答。源站开发、安全扫描和隐私说明都用得到。
发往源站的请求头
节点每次回源都重写下面这些头。值为空时不发这个头,所以访客自带的同名头不会原样透传。
| 请求头 | 值 | 什么时候有 |
|---|---|---|
Host | 默认是访客请求的 Host;回源设置里可以改成源站地址或自定义值 | 每次回源 |
X-Forwarded-For | 节点看到的对端地址。对端是网站设置的可信代理时,保留它传来的链并在末尾追加对端地址 | 每次回源;节点自己的缓存预热请求不带 |
X-Real-IP | 对端地址;对端是可信代理且它传来的 X-Real-IP 是合法地址时,沿用该值 | 同上 |
X-Forwarded-Proto | 访客连接节点用的协议,http 或 https | 同上 |
Upgrade、Connection | WebSocket 升级请求原样转发 Upgrade,Connection 为 upgrade | 只在开了 WebSocket 的网站 |
X-Client-Verify、X-Client-Cert-Fingerprint、X-Client-Cert-Subject | 客户端证书校验结果、指纹和主题 | 只在开了客户端证书认证的 HTTPS 网站;其他网站一律删掉访客自带的这三个头,防止伪造 |
多级节点之间转发时,上一级节点会带一个内部标记头 X-Cdnca-L2-Hop,源站收不到它。访客自带的这个头会被覆盖。
源站返回的 Location、Refresh 如果指向源站自己的地址,节点会改成访客访问的域名,访客不会被跳到源站 IP 上。
返回给访客的响应头
| 响应头 | 值 | 什么时候有 |
|---|---|---|
X-CDN-Cache | HIT、MISS、EXPIRED、STALE、UPDATING、REVALIDATED 或 BYPASS | 开了缓存的网站,且“响应头显示缓存状态”打开(默认打开);攻击升级到 B 级及以上时自动不发 |
X-CDN-Cache-Reason | 没走缓存的原因,取值见功能参考的缓存一页 | 与上一行相同,只在 BYPASS 时有 |
Server | 默认 cdnca;在“系统设置 → Nginx”里可改,留空则不发 | 每个响应 |
Alt-Svc | h3=":<端口>"; ma=86400 | 网站在该端口开了 HTTP/3 |
Strict-Transport-Security | 按网站 HSTS 设置 | 网站开了 HSTS |
X-Cdnca-Challenge | 挑战方式(如 delay、slider)、redirect、banned、expired、failed | CC 规则返回的验证页、跳转和封禁页 |
X-Cdnca-WAF | challenge、banned、expired、failed | WAF 规则返回的验证页和封禁页 |
X-Cdnca-Ban | listed(状态码 403) | 访客 IP 在网站黑名单里 |
X-Cdnca-Referer-Check | rejected(状态码 403) | 防盗链拒绝 |
Retry-After | 秒数 | 429、封禁页、验证页 |
源站自己发的 X-CDN-Cache、X-CDN-Cache-Reason、X-Cdnca-Cache-Key、X-Cdnca-Site 会被节点去掉,源站不能伪造缓存状态。后两个头只在节点自己的缓存预热请求上出现,访客看不到。
节点自己生成的错误页和拦截页另带 Cache-Control: no-store, max-age=0、Content-Security-Policy(不加载任何外部资源)、Referrer-Policy: no-referrer、X-Content-Type-Options: nosniff,并去掉 Set-Cookie、Location、ETag、Via 等头。
节点下发的 Cookie
这些 Cookie 都由节点在访客通过验证或进入会话保持时写入,用于安全验证或负载均衡。如果你的网站有隐私说明,可能需要列出它们。
| Cookie | 用途 | 有效期 | 属性 |
|---|---|---|---|
__cdnca_cc_pass | 通过 CC 验证的凭证。签名绑定网站、规则、访客网段和 User-Agent | 规则里的“通过后免验证时长”,60 秒到 7 天 | HttpOnly、SameSite=Lax,HTTPS 下加 Secure;设置了挑战 Cookie 域名时带 Domain |
__cdnca_cc_probe | 302 跳转验证用的一次性随机数 | 验证页有效期,30 到 3600 秒 | HttpOnly、SameSite=Lax |
__cdnca_waf_pass | 通过 WAF 验证的凭证。签名绑定网站规则、访客网段和 User-Agent | 规则设置的通过时长 | HttpOnly、SameSite=Lax,HTTPS 下加 Secure |
__cdnca_waf_probe | WAF 对非 GET 请求先跳转验证时的一次性令牌 | 300 秒 | HttpOnly、SameSite=Lax |
__cdnca_waf_grey | 托管 WAF 灰区挑战通过的凭证 | 默认 3600 秒 | 同 __cdnca_waf_pass |
__cdnca_ad | 智能自动防御 L1 挑战的凭证,由验证页的脚本写入,绑定网站、访客地址和小时 | 3600 秒 | SameSite=Lax(由脚本写入,没有 HttpOnly) |
| 挑战策略的凭证 | “挑战策略”通过后的凭证,名字由策略决定,必须以 __Host- 开头 | 策略里的通过时长 | Secure、HttpOnly、SameSite=Lax |
| 会话保持 Cookie | 回源负载均衡选了“Cookie 会话保持”时,记住访客落在哪个源站,名字由你设置 | 浏览器会话 | HttpOnly、SameSite=Lax |
你的源站不要使用 __cdnca_ 开头的 Cookie 名,以免和节点冲突。
由节点直接应答的路径
下面的路径不回源,由节点自己处理。安全扫描器报告这些路径时,可以引用本页说明它们属于 CDN 节点。
| 路径 | 用途 | 什么时候存在 |
|---|---|---|
/_guard/verify | CC 验证页提交答案 | 网站有带验证动作的 CC 规则 |
/.cdnca/waf/verify | WAF 验证页提交答案 | 网站有带验证动作的 WAF 规则 |
/.cdnca/challenge/verify、solver.js、picture | 挑战策略的提交地址、计算脚本和图片 | 网站绑定了挑战策略 |
/.well-known/acme-challenge/ | 证书文件验证(HTTP-01) | 节点持有的令牌由节点应答;其他令牌在网站打开“源站申请证书”时转给源站,否则返回 404 |
/.well-known/cdnca-market-probe、/.well-known/cdnca-market-benchmark | 节点市场探测与测速 | 只在节点市场供货节点的 80 端口,且只对没有配置网站的域名应答;已配置的网站域名照常回源 |
/_cdnca302/ 开头的路径 | 302 调度的落地地址 | 只在开了 302 调度的明文端口 |
节点错误页上的请求 ID
节点自己生成的错误页底部显示“请求 ID”、节点编号和访客 IP。访客反馈问题时请他提供这三项,管理员可以在访问日志里按请求 ID 找到这条请求。
常见问题
源站看到的访客 IP 是节点的地址
读取 X-Forwarded-For 的第一个地址或 X-Real-IP。前面还有自己的代理(如负载均衡)时,在网站设置里把它加为可信代理,节点才会保留它传来的地址链。
浏览器里看不到 X-CDN-Cache
确认网站开了缓存、“响应头显示缓存状态”是打开的,并且网站没有处在攻击升级 B 级及以上。
源站的跳转把访客带到了源站 IP
节点只改写指向源站自身地址的 Location 和 Refresh。源站写的是另一个域名时,节点不改,请在源站修正跳转地址。