
- 目的:提高在泰国或面向东南亚用户的网站响应速度与稳定性。
- 前提:你有一台在泰国的数据中心的服务器(可 SSH 登录),域名可控,具备管理 DNS 权限。建议准备:root 或 sudo 权限、TLS 证书、基础监控账号(例如 Grafana/Prometheus 或第三方)。
- 工具:nginx、Varnish(或使用 Cloudflare/BunnyCDN 等第三方 CDN)、certbot、curl、dig。
- 第三方 CDN(Cloudflare、BunnyCDN、Fastly):优点是全球 POP、管理简单、DDoS 防护;缺点为费用与部分自定义限制。适合快速覆盖泰国及周边。
- 自建(在泰国或周边多机房部署反向代理 + Varnish/Nginx):优点是更可控、成本可低于大厂;但需要维护节点与监控。可将自建节点与第三方 CDN 组合使用(origin shield)。
- 步骤:注册 Cloudflare,添加站点,切换 nameserver 到 Cloudflare 提供的 NS。
- 将站点的 A 记录指向你的泰国服务器(或使用 CNAME 指向 CDN),在 Cloudflare 面板把代理(橙云)打开以启用 CDN。
- 若使用自建边缘节点,建议在 DNS 中通过 GeoDNS 或者基于 Anycast 的第三方服务把东南亚流量导向泰国节点。
- 安装(Debian/Ubuntu):sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
- 基本配置(/etc/nginx/sites-available/example):设置 server_name、listen 80/443,使用 proxy_pass 指向后端应用。示例:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 启用 HTTPS:sudo certbot --nginx -d example.com,确保证书自动续期(系统定时任务)。
- 安装:sudo apt install -y varnish。默认监听 6081,后端指向 Nginx(127.0.0.1:8080)。
- 基本 VCL(/etc/varnish/default.vcl)核心片段:
vcl 4.0; backend default { .host = "127.0.0.1"; .port = "8080"; }
在 vcl_recv 中设置:if (req.method != "GET" && req.method != "HEAD") { return (pass); }
- 启动并测试:systemctl enable --now varnish,curl -I -H "Host: example.com" http://localhost:6081/ 看 X-Varnish、Age 头。
- 端口示例:Varnish 监听 80(或 6081),Nginx 监听 8080(应用的真实服务),Nginx 同时监听 443 做 TLS 终端或由 CDN 终端 TLS。
- 在 Nginx 配置里增加缓存相关头:add_header X-Cache-Status $upstream_cache_status; proxy_cache_bypass $http_cache_control; 并确保后端返回合适的 Cache-Control。
- 静态资源(图片、js、css):Cache-Control: public, max-age=31536000, immutable;并配合版本号(文件名中带 hash)。
- 动态页面:默认不缓存或短 TTL(例如 max-age=60),对于可缓存的动态片段使用 Edge Side Includes(ESI)或在 Varnish 中做基于 Cookie 的缓存规则。
- 禁用缓存条件:带有 Authorization、Set-Cookie 或特定 Cookie 时通常应该 bypass 或 pass。
- 主动失效:使用 CDN 的 API(例如 Cloudflare Purge API 或 BunnyCDN 的 purge endpoint)去按 URL、Tag 清理缓存。
- Varnish 清理:使用 varnishadm ban 或 vcl 中提供的 PURGE 接口(需在 Varnish 中实现安全的 purge endpoint)。示例:varnishadm ban "req.http.host == example.com && req.url ~ /path/".
- 被动失效:通过文件名版本化(推荐)避免频繁 purge。
- 开启 gzip/brotli:在 Nginx 启用 gzip,并在 CDN 或边缘节点启用 Brotli,确保 content-encoding 正确。
- 启用 HTTP/2 和 QUIC/HTTP3(如果 CDN 支持,则由 CDN 提供;自建要配置 Nginx 与 OpenSSL 支持)。
- TLS:使用现代套件(TLS1.2/1.3),自动续期证书并启用 OCSP Stapling。
- 测试缓存命中率:用 curl -I 查看响应头(Age, X-Cache、X-Varnish)。示例:curl -I https://example.com/static.js
- 性能测试:使用 wrk 或 siege 做并发压测,观察缓存命中后 QPS 与延迟变化。
- 监控:收集 Varnish hit/miss、Nginx 访问日志、CDN 报表,设置报警阈值(未命中率高、错误率上升)。
- 节点放置:如果用户主要在泰国,优先在泰国或邻近国家(新加坡、香港)布置边缘节点或选择有这一区域 POP 的 CDN。
- 法规与延迟:注意当地法规与带宽成本,优先使用最近 POP 并启用压缩与缓存降低出口带宽。
- 测试节点:用 thailand-based ping/traceroute 或第三方测速(例如 uptrends)验证实际延时。
- 页面不更新:检查是否被 CDN 缓存,查看响应头并在 CDN 面板或用 purge API 清理。
- 登录或会话异常:确认缓存没有缓存带有 Set-Cookie 的响应,或用 Cookie 规则 bypass。
- HTTPS 错误:检查证书链、SNI 配置,若使用 CDN,确认在 CDN 上正确上传/使用证书或启用 “Full” TLS 模式。
问:在泰国服务器上使用 Cloudflare 时,我需要在哪端启用 SSL?
答:建议双端启用:Cloudflare 面板选择 “Full (strict)” 模式,并在源服务器(泰国机房)安装有效 TLS 证书(可用 Let's Encrypt)。这样 Cloudflare 与终端用户之间,以及 Cloudflare 与源站之间都为加密通道,安全性与兼容性最好。
问:如何验证缓存是否生效及命中率?
答:用 curl 查看响应头(例如 Age、X-Cache、X-Varnish、CF-Cache-Status),多次请求资源观察第一次 miss、随后命中;在 Varnish 使用 varnishstat 查看 hit, miss;在 CDN 面板查看缓存命中率统计。
问:我是否需要在泰国部署多个节点?如何决定?
答:若流量集中在泰国单一城市,一个节点配合优质 CDN 即可;若覆盖泰国多地或越南、马来等邻国,考虑多节点或使用全球 CDN POP。用延迟测试与流量分布决定是否扩展节点以降低用户侧延时。