CyberCDN 使用指南
CyberCDN 是自研的内容分发与边缘缓存平台,给自己的站和业务用。本书讲它是什么、怎么管节点和缓存。对外的公共前端资源加速请看 adminCDN。
wpcy 字体 CORS(双 ACAO)
运维真源:桶
wenpai-wpsss-wpcy→wpcy.m.wptea.com→ CyberCDNwpcy_media→ 前台https://wpcy.com引用/wpfonts/。 现行策略:A′(边缘停写)。方案 B(清空 OSS CORS)已回滚,不是站立策略。
日期:2026-11-01(Asia/Shanghai)
范围:桶 wenpai-wpsss-wpcy → 自定义域 wpcy.m.wptea.com → CyberCDN OpenResty wpcy_media → 前台 https://wpcy.com 引用 /wpfonts/(local.css / woff2)
状态:现行策略为 A′(边缘停写)。反模式 B(清空 OSS CORS)曾短暂落地并已回滚,不是站立策略。
1. 现象
浏览器控制台报 CORS,拒载例如:
https://wpcy.m.wptea.com/wpfonts/packages/.../*.woff2- 同路径下的
local.css
响应头里出现 两条 同值(或同 Origin)的:
Access-Control-Allow-Origin: https://wpcy.com
Access-Control-Allow-Origin: https://wpcy.com
浏览器规范不允许重复的 Access-Control-Allow-Origin,字体会加载失败。
典型页面 Origin:https://wpcy.com(亦可能是 https://www.wpcy.com)。
2. 根因
同一请求上 两层都在写 ACAO:
| 层 | 来源 | 常见伴随头 |
|---|---|---|
| 上游 OSS | 桶 CORS 规则 | x-oss-*、Access-Control-Allow-Credentials、Access-Control-Expose-Headers: ETag、Access-Control-Max-Age |
| 边缘 CyberCDN | wpcy_media 的 cors_origin(OpenResty) |
server: openresty、x-cybercdn-node、x-cache-status、Timing-Allow-Origin 等 |
边缘 HIT 时若缓存了「已带双头」的对象,purge 前会继续双 ACAO。
原则(跨 CDN 通用):对同一路径,只让一层负责写出 ACAO。
- 若 OSS(或源站)已有完整 CORS → 边缘 不要再写 ACAO。
- 仅当边缘必须自己拥有 ACAO、且上游也会写时,才用
proxy_hide_header藏上游Access-Control-*(见 §4.2)。Cloudflare 等其它 CDN 若再加 ACAO,同样会复现双头。
3. 现行策略 A′(站立)
Feng 批示卡片:t674s3394(留 OSS 完整 CORS;边缘侧停掉重复写入)。
3.1 OSS(保留,不要清)
桶:wenpai-wpsss-wpcy(杭州)
站立 CORS(与备份一致,示例):
- AllowedOrigin:
https://wpcy.com、https://www.wpcy.com、https://wpcy.m.wptea.com - AllowedMethod:
GET、HEAD - AllowedHeader:
* - ExposeHeader:
ETag - MaxAgeSeconds:
86400
现网响应里还可见 Access-Control-Allow-Credentials: true(随 OSS 规则 / 实现透出)。不要为了「只留边缘」而清空桶 CORS。
改桶 CORS 用 devops 管理 profile(现网对象级 AK 通常无桶 CORS 权限):
# 只读示例;改写前先备份
aliyun --profile wenpai oss cors --method get oss://wenpai-wpsss-wpcy
3.2 边缘(推荐实现:只停写)
站点 / 上游名:wpcy_media(OpenResty / CyberCDN)。
推荐 A′ 落地(赑屃现网选择):
- 去掉
wpcy_media上的cors_origin(边缘不再写入Access-Control-Allow-Origin等)。 - 不要对上游做
proxy_hide_header Access-Control-*。
理由:与「留 OSS 完整 CORS」一致;hide 会剥掉 credentials / Expose ETag 等上游头,前台与缓存语义变差。
发边后 purge 各机 wpcy_media 缓存中 KEY 含 /wpfonts/ 的对象(含 dual 缓存路径,若有)。
3.3 验收后期望
带 Origin: https://wpcy.com 的 GET(MISS 与 HIT):
- 恰好 1 条
Access-Control-Allow-Origin: https://wpcy.com - 上游 OSS CORS 相关头可继续出现(credentials、Expose ETag、Max-Age 等)
- 前台抽检:某包
local.css+ 样本.woff2均可加载
4. 禁止与备选
4.1 禁止当作站立策略:方案 B
B = 清空 OSS 桶 CORS,只靠边缘注入 ACAO。
2026-11-01 曾按旧批示短暂执行 B(备份见 Mac ~/office/wenpai/reports/2026-11-01-wpcy-oss-cors-backup-*.xml),验收曾过;随后按改口 已从备份恢复 OSS CORS,边缘 conf 未按 B 改。
B 不是现行策略。 勿再清桶 CORS,除非 Feng 书面改口并同步本真源。
4.2 备选:边缘拥有 ACAO 时才 hide 上游
仅当产品要求 边缘必须写 ACAO(例如边缘要统一多源、或 OSS 故意无 CORS),才会:
- 边缘
cors_origin(或等价)写入单条 ACAO; - 同时
proxy_hide_header藏上游全部Access-Control-*,避免双头。
对照历史:admincdn-wpstatic / windfonts 一类「边缘拥有 + hide 上游」。
对当前 wpcy /wpfonts/ 路径,优先 §3.2 停写,而不是 hide。
5. 验收 curl
对象示例(可换成现网任一包路径):
https://wpcy.m.wptea.com/wpfonts/packages/<pack-id>/<file>.woff2
https://wpcy.m.wptea.com/wpfonts/packages/<pack-id>/local.css
# 应恰好 1 行 Access-Control-Allow-Origin
curl -sI -H 'Origin: https://wpcy.com' \
'https://wpcy.m.wptea.com/wpfonts/packages/wenfeng-syhtcjk/6.woff2' \
| grep -iE 'HTTP/|access-control-|x-cache-status|x-oss-|server:'
# HIT 复查(按节点 --resolve 或连续两次)
# 期望:ACAO 仍为 1;x-cache-status: HIT
统计 ACAO 行数应为 1(MISS、HIT 都过)。
前台:wenfeng-xxzt/local.css 与样本 woff2 等抽检同理。
OPTIONS:字体主路径走 GET;OPTIONS 行为以现网 OSS/边缘为准,不作为「必须与 GET 同构」的硬门槛,但若改 CORS 后 OPTIONS 异常需记入回执。
6. 责任人
| 角色 | 职责 |
|---|---|
| 赑屃 | 边缘 ansible / OpenResty:去掉 wpcy_media 的 cors_origin;发边;按需 purge /wpfonts/ |
| Ops / 白泽 | curl 验收(单条 ACAO、MISS/HIT、前台抽检);OSS CORS 只读核对与备份;事故时回滚协调 |
| Foundry | 产品文档与站长侧说明;协调批示;不直接改生产 OSS/CDN |
生产红线:边缘/OSS 变更需 Feng 原话 + 消息/卡片 id(如 t674s3394);转述不足以 unlock 发边。
7. 相关路径与备份
| 项 | 位置 |
|---|---|
| 桶 | wenpai-wpsss-wpcy |
| 自定义域 / CDN 宿主 | wpcy.m.wptea.com |
| 边缘 upstream / 站点 | wpcy_media |
| 对象前缀 | /wpfonts/(packages、local.css、woff2) |
| 边缘缓存 | /var/cache/openresty/wpcy_media(及 dual /opt/openresty-edge/cache/wpcy_media,若存在) |
| OSS CORS 备份(B 前回滚源) | Mac ~/office/wenpai/reports/2026-11-01-wpcy-oss-cors-backup-20261101-105511.xml |
| 双头定位稿 | Mac ~/office/wenpai/reports/2026-11-01-wpcy-font-cors-dup.md |
| B 执行回执(已作废为站立) | Mac ~/office/wenpai/reports/2026-11-01-wpcy-oss-cors-clear-B.md |
8. 变更记录(摘要)
| 时间(Asia/Shanghai) | 事件 |
|---|---|
| 2026-11-01 上午 | 发现双 ACAO;定位 OSS + wpcy_media cors_origin |
| 同日 | 曾执行 B(清 OSS CORS + purge);curl 单条 ACAO PASS |
| 同日稍后 | 改口 A′;OSS 从备份恢复;边缘 conf 未按 B 改 |
| 同日 | 赑屃 A′ 落地选择:仅去 cors_origin,不 hide 上游;发边后 purge /wpfonts/;白泽 curl 验收 |