很多团队把香港服务器当“源站”直接挂域名:静态、动态、后台、数据库全堆一台。
结果静态流量把出网带宽吃满,跨境回源反复建连,晚高峰 TTFB 飘、源站被扫、缓存命中率上不去。
更合理的定位是:香港节点只做“动态加速中间层”——静态交给 CDN 边缘,动态请求在这里做协议卸载、连接复用、缓存降级、回源收敛,源站 IP 永远不暴露。
本文给一套可复制的“CDN 边缘 + 香港中间层 + 境内/海外源站”架构,附 Nginx 配置、缓存键设计、回源保护、监控指标。
一、先重排位置:香港不是源站,是“第二跳”
错误分层:
text
用户 → 香港服务器(Nginx+PHP+MySQL 全栈)
问题:机器一崩全站崩,带宽贵,跨境回源没收敛。
正确分层:
text
用户 → CDN 边缘(静态缓存、WAF、CC 过滤) → 香港中间层(反代/动态加速/协议卸载/限流) ├─ 静态:边缘命中,不回源 ├─ 动态读:香港本地缓存快照 └─ 写/未命中:受控回源到境内或海外源站 → 源站(只收香港中间层回源流量,公网不可见)
香港的价值是“亚太枢纽”:
- 离大陆近、离东南亚近、国际出口丰富
- 适合做动态请求的“就近终结点”和“回源聚合器”
二、静态与动态怎么切(缓存键是核心)
1. 静态:长缓存 + 版本化
nginx
location ~* \.(js|css|png|webp|woff2)$ { expires 30d; add_header Cache-Control "public, max-age=2592000, immutable"; }
资源发布用 app.7b3f.js 这种指纹名,避免缓存击穿。
2. 动态 API:不硬缓存,做“短缓存+降级快照”
nginx
location /api/ { # 边缘不缓存,香港层做 2s 快照 proxy_cache dynamic_cache; proxy_cache_valid 200 2s; proxy_cache_use_stale error timeout updating; proxy_cache_lock on; add_header X-Cache-Status $upstream_cache_status; }
关键指令:
proxy_cache_use_stale:源站抖了返回旧数据,别直接 5xxproxy_cache_lock:高并发回源只放一个请求,其余等结果(防穿透)- 缓存键去掉无效 query(utm_*、时间戳)
nginx
proxy_cache_key "$host$uri$is_args$args_except_utm"; # 用 map 或 lua 清洗 query
3. 缓存键设计(命中率从 50% 到 85% 的关键)
- 去噪:去掉
utm_*、_t、cb随机参数 - 分片:按
Accept-Language/Cookie: session_anon做 Vary,不按完整 Cookie - 登录态:带
Authorization的不缓存,走直连回源
三、香港中间层 Nginx 最小配置
nginx
upstream origin { server 内网源站IP:8080 max_fails=3 fail_timeout=10s; keepalive 64; } server { listen 443 ssl http2; server_name api.example.com; ssl_certificate /certs/fullchain.pem; ssl_certificate_key /certs/key.pem; ssl_protocols TLSv1.3; # 只收 CDN 回源网段 allow CDN回源段; deny all; # 协议卸载 gzip on; brotli on; gzip_types application/json text/css application/javascript; location / { proxy_pass http://origin; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; # 超时与重试 proxy_connect_timeout 3s; proxy_read_timeout 8s; proxy_next_upstream error timeout http_502; # 连接复用 proxy_set_header Connection ""; } }
内核侧顺手调:
bash
sysctl -w net.ipv4.tcp_congestion_control=bbr sysctl -w net.core.somaxconn=65535 sysctl -w net.ipv4.tcp_fastopen=3
四、回源收敛:别让边缘直连源站
问题:CDN 边缘节点多,直接回源会把源站连接数打爆。
解法:香港层做 Origin Shield。
text
CDN 边缘(全球 300+ 节点) → 只回源到香港中间层(少量固定 IP) → 香港层连接池复用,回源境内源站
收益:
- 源站只看到香港 IP,隐藏真实出口
- 回源连接数下降一个数量级
- 晚高峰边缘抖动,源站不被瞬时流量冲垮
配合:
- 回源鉴权头(边缘带
X-Origin-Token,香港层校验) - 回源限速(防止单边缘刷量)
- 回源重试退避(指数 backoff)
五、动态加速:跨洋请求怎么“省往返”
跨境动态请求最怕:
- TCP 三次握手 + TLS 1.3 握手
- 每个请求新建连接
- 小包队头阻塞
优化顺序:
- HTTP/2 多路复用:一个连接并发多个请求
- TLS 会话复用 / 0-RTT(可控开启,防重放)
- 长连接池:Nginx 到源站
keepalive 64起步 - HTTP/3(QUIC):丢包环境更稳,CDN 边缘优先开
- 合并小接口:前端把
/user/info+/cart/count合成一个/me/summary
nginx
# 开启 QUIC(需对应 CDN/边缘支持) listen 443 quic reuseport; http3 on;
六、安全:中间层最小暴露
- 管理端口(22/22222)只办公 IP + 密钥
- 回源端口不绑公网,源站防火墙只收香港中间层
- WAF 规则放 CDN 边缘,香港层做二层限流
- 限连接数 + 限 QPS:
nginx
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn perip 20; limit_req_zone $binary_remote_addr zone=apirl:10m rate=50r/s; limit_req zone=apirl burst=100 nodelay;
- 敏感接口(登录/支付)走独立 upstream,独立限流
七、可观测:盯“回源率”不是“CPU”
CDN 控制台之外,香港层自己采:
bash
# 缓存命中 add_header X-Cache-Status $upstream_cache_status; # 日志里看 HIT/MISS/STALE 比例
Prometheus 指标重点:
nginx_cache_hit_ratio(目标 >80% 静态,动态 >30%)origin_qps(回源 QPS,越低越好)ttfb_p95分三段:边缘→香港、香港→源、端到端proxy_upstream_stale次数(降级触发频率)- 回源错误率、连接池等待数
告警:
- 回源 QPS 突增 3 倍 → 缓存键可能设计错
- STALE 比例持续高 → 源站慢,不是 CDN 慢
- 香港层
TIME_WAIT暴涨 → 没开长连接
八、合规边界(香港节点也要讲)
香港不是“不用管数据”:
- 香港《个人资料(私隐)条例》PDPO 管本地用户数据
- 涉及大陆用户 PII:最小化出境、脱敏、聚合指标回境内
- 涉及欧盟用户:GDPR 传输机制(SCC/DPA)
- 日志只留元数据:时间、路径、匿名 ID、状态码,不落原始 token/手机号
text
香港层:脱敏后上下文、聚合指标、缓存快照 源站:业务明文库(境内/合规区) 跨境:只传必要字段,mTLS + 加密隧道
九、最小落地清单
- [ ] CDN 边缘收静态,长缓存+指纹名
- [ ] 香港层只做反代/动态缓存/回源收敛
- [ ] 缓存键清洗 query,动态接口开 stale-while-revalidate
- [ ] 源站只收香港中间层 IP,公网不解析
- [ ] HTTP/2 常开,QUIC 按边缘能力开
- [ ] 连接池 + BBR + TCP Fast Open
- [ ] 限流限连、WAF 前置、回源鉴权
- [ ] 监控命中率/回源 QPS/TTFB 三段拆分
- [ ] 日志脱敏,PII 不出境明文
十、什么别放香港中间层
- 主数据库(只回源,不本地写)
- 未脱敏客服录音/合同
- 支付卡号明文(走 Token 化)
- 长期会话明文化存储
- 把“香港节点”当万能源站全量扛
十一、总结
香港服务器最舒服的用法,不是“买台机跑全站”,而是:
静态在边缘,动态在香港,源站藏后面。
CDN 挡流量,香港层做三件事:
- 协议卸载(TLS/HTTP2/压缩)
- 回源收敛(连接池+缓存锁+降级快照)
- 链路缓冲(跨境抖动时返回 stale,不炸源站)
业务方看到的是“快”,
架构方看到的是“源站连接数下来了、出网带宽降了、晚高峰不抖了”。
香港节点不是源站替代者,
是跨境流量里那层“该被中间商赚的差价——但这次差价值得”。