1.
先做诊断:确认症状与瓶颈
- 使用 ping 和 mtr 确认延迟与丢包:ping -c 10 <你的IP>,mtr -rwzbc100 <你的IP>。
- 用 curl 测试首字节时间:curl -o /dev/null -s -w '%{time_starttransfer}\n' https://example.com/。
- 用 top/iostat/iftop 看服务器CPU、IO、带宽是否饱和:sudo apt install iftop iotop;sudo iftop -i eth0。
2.
立刻上线 CDN(推荐 Cloudflare 免费方案)
- 注册 Cloudflare,添加网站并完成 DNS 验证。
- 在 Cloudflare DNS 中把主机记录切换为代理(橙云)。将 SSL/TLS 模式设为“Full (strict)”若有合法证书。
- 创建 Page Rule:*yourdomain.com/* -> Cache Level: Cache Everything;Edge Cache TTL: 4 hours(或更长);可配合“Bypass cache on cookie”规则。
3.
替换静态资源到拉取型 CDN(BunnyCDN/Cloudflare Workers 均可)
- BunnyCDN:注册->Create Pull Zone->Origin = 你的 Linode 公网 IP 或域名->把 CDN 域名(xxx.b-cdn.net)作为静态资源域名或通过 CNAME 覆盖静态子域。
- 修改 HTML/模板中静态资源域名(js/css/images)到 CDN 子域,保证尽快生效。
4.
Nginx 临时微缓存(适合动态站点短期加速)
- 安装:sudo apt update && sudo apt install nginx。
- 在 nginx.conf 或 site 配置中加入:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:100m max_size=2g inactive=60m use_temp_path=off; 在 server/location 中:proxy_cache microcache; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_cache_valid 200 302 10m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cache-Status $upstream_cache_status;。
- 重载 nginx:sudo nginx -t && sudo systemctl reload nginx。
5.
Varnish 作为反向缓存(适合需更强控制的场景)
- 安装:sudo apt install varnish。
- 修改 /etc/default/varnish 指定后端为 127.0.0.1:8080(将你的原本 nginx 改为监听 127.0.0.1:8080);配置基本 VCL:在 vcl_recv 中对静态资源 return (hash); 对带 cookie 的用户选择 pass。
- 启动并观察:sudo systemctl restart varnish;varnishstat、varnishlog 检查命中率,逐步提高缓存策略。
6.
应用层缓存:Redis / Memcached(减少 DB 压力)
- 安装 Redis:sudo apt install redis-server。
- 在应用中启用对象缓存(WordPress 用 Redis Object Cache 插件,Laravel 用 predis/redis 配置)。
- 设置合理过期:常用查询缓存 60s-3600s,长尾可更长,避免缓存雪崩。
7.
优化传输与内核:启用 BBR 和调优 TCP
- 开启 BBR:编辑 /etc/sysctl.conf,加入 net.core.default_qdisc=fq 和 net.ipv4.tcp_congestion_control=bbr,然后 sudo sysctl -p。
- 验证:sysctl net.ipv4.tcp_congestion_control && lsmod | grep bbr。
- 若带宽受限,检查流量峰值与 Linode 控制面板,考虑临时升级实例或增加 NodeBalancer。
8.
开启压缩与优化静态资源
- Nginx 启用 gzip:gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_proxied any; gzip_min_length 256;。
- 若使用 Cloudflare,可启用 Brotli 与 Auto Minify(JS/CSS/HTML)。图片可交由 CDN 做 WebP 转码或用 ImgIX/Bunny 圆化。
9.
快速回滚与灰度:使用子域与 CNAME 切换
- 把静态子域 cdn.yourdomain.com 指向 CDN CNAME,测试后再替换引用。
- 若某次改动出问题,迅速把 DNS 或 Nginx 指回源站(注意 DNS TTL)。
10.
Linode 平台相关:NodeBalancer 与数据中心切换
- NodeBalancer:在 Linode 控制台创建 NodeBalancer,把后端设置为你的 Linode 实例以做 L4 负载和健康检查。
- 临时迁移:若
新加坡机房网络长期不稳定,可快速在最近可用的机房(东京、孟买或台北/香港等)部署一个副本并使用 DNS 低 TTL 切换。
11.
监控与逐步恢复:如何验证加速效果
- 用 webpagetest.org、GTmetrix、curl -w 和浏览器 DevTools 的网络面板对比启用 CDN/缓存前后首字节时间(TTFB)、加载时间与缓存命中率。
- 持续观察 24-72 小时,逐步放宽缓存策略或将动态页面回源。
12.
问:如果我不能更改 DNS,还能做哪些临时加速?
可以在服务器端做:启用 Nginx 微缓存或部署 Varnish,安装 Redis 减少数据库查询,优化 Nginx gzip/Brotli 与 HTTP/2。若无法改DNS,可用反向代理或在应用层替换静态资源为第三方 CDN 链接。
13.
问:Cloudflare 的 Cache Everything 会不会把用户登录页面也缓存?如何避免问题?
会的,Cache Everything 会缓存 HTML,所以必须用 Page Rules 或 Worker 设置排除规则:按 URL 或 Cookie(如有登录 cookie)做绕过(Bypass)。建议对登录、后台路径设置不缓存(匹配 /wp-admin/* 或 /user/*)。
14.
问:短期内费用与风险如何权衡?
短期优先使用免费或低成本方式:Cloudflare 免费 + Nginx 微缓存 + Redis。若要更高 SLA 可付费升级 CDN(Bunny/Cloudflare Pro)或临时横向扩容 Linode。操作前备份配置与证书,逐步上线并监控命中率与错误。
来源:linode 新加坡机房太慢时的临时加速与缓存策略