1. 概览与目标设定
目标:在
台湾VPS按量计费场景下,尽量减少出站流量并保证响应速度。
小分段:评估流量来源(静态资源/动态API)、确定缓存层次(边缘CDN + 本地反向代理 + 源站压缩)、设定压缩优先级(文本>图片>视频)。
2. 准备环境(示例以 Ubuntu/Debian 为准)
步骤:更新系统并安装基础组件。
命令示例:sudo apt update && sudo apt upgrade -y
安装 nginx、varnish、imagemagick、webp 工具:sudo apt install -y nginx varnish imagemagick webp git build-essential
3. 开启 Nginx 的 gzip(最简单且实用)
修改 /etc/nginx/nginx.conf 或 site 配置:
gzip on; gzip_vary on; gzip_comp_level 5; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_min_length 256;
小分段:重启 nginx:sudo systemctl reload nginx;通过 curl --compressed -I 检查响应头有 Content-Encoding: gzip。
4. 静态资源预压缩(省流量且速度快)
做法:在构建/部署阶段生成 .gz(gzip)版本的文件并启用 nginx 的 gzip_static。
工具示例:find ./public -type f -name '*.js' -o -name '*.css' | xargs -I{} gzip -k -9 -f {}(会生成 file.js.gz)。
Nginx 配置加入:gzip_static on; 并设置正确的 add_header Vary 等。
5. 使用 CDN 做边缘缓存(优先推荐,减少VPS出流)
步骤:选择在台湾或东亚节点覆盖好的 CDN(Cloudflare/KeyCDN/腾讯云CDN等),将静态域名 CNAME 指向 CDN。
小分段:在 CDN 上启用 Brotli 与自动图像优化(如果有),开启缓存规则:静态文件长缓存(max-age 31536000),并开启压缩传输以减少回源流量。
6. 部署本地反向代理缓存:Nginx + Varnish 方案
架构:Nginx (SSL终端 + 静态) 前置 -> Varnish (缓存动态/页面) -> 后端应用。
配置要点:Varnish 缓存规则(VCL)中对 HTML 采用短缓存(例如 1-10 秒的 microcache),对 API 根据业务设置;通过 Nginx 设置 proxy_cache 对少变静态资源做二级缓存。
启动示例:编辑 /etc/default/varnish 配置监听端口 6081,Nginx proxy_pass 到 127.0.0.1:6081。
7. 图片与媒体的带宽优化
步骤:在部署流程中批量转换 WebP 与自动压缩,示例命令:cwebp -q 80 image.jpg -o image.webp;并保留原始格式的回退。
小分段:在 Nginx 检测 Accept header 中包含 webp 时优先返回 .webp(try_files $uri$webp $uri =404)。使用 Range 请求支持大文件分块传输。
8. 缓存控制头与条件请求(304)
配置:为静态资源设置 Cache-Control: public, max-age=31536000, immutable;对经常变更的资源设 ETag/Last-Modified 以利用 304 减少实际字节传输。
小分段:Nginx 默认支持 If-Modified-Since 与 ETag,确认 proxy_hide_header 不会屏蔽这些头。
9. 监控与回源控制(实测与调整)
监控要点:开启 nginx access_log,使用 goaccess 或 awk 统计 200/304/206 的比例,关注回源率和实际出站流量。
小分段:如果回源率高,排查:Cache-Control/Set-Cookie 导致不可缓存、Vary 过多、URL 参数未归一化。通过设置 cache key 去除无关参数(Varnish 或 CDN 功能)。
10. 实操检查清单(上线前必做)
清单:1) 通过 curl -I 与 curl --compressed 检查压缩;2) 用浏览器开发者工具查看资源是否来自 cache(HIT);3) 在 CDN 控制台查看边缘命中率;4) 统计回源出站字节。
部署建议:逐步放大流量并观察 24-72 小时数据再全面切换。
11. 常见故障与快速修复
示例:压缩无效 -> 检查响应头是否含 Content-Encoding 或 nginx 是否被 proxy 层覆盖;缓存未命中 -> 检查 Set-Cookie 与 Vary,尝试去除不必要的 Cookie。
小分段:遇到大文件下载频繁回源,优先启用 CDN 的大文件分块或启用本地缓存并允许 Range。
12. 问答:在台湾VPS开启 Brotli 是否必要?
问:在台湾VPS按流量计费情况下是否必须启用 Brotli?
答:Brotli 对文本类资源压缩比更高,但实现复杂度较 gzip 高。优先策略是先启用 gzip + 静态预压缩 + CDN 的 Brotli(很多 CDN 已可直接启用),如果服务器性能允许且能方便集成再考虑在源站编译/安装 ngx_brotli。
13. 问答:如何判断缓存策略是否有效?
问:我怎么确认设置的缓存和压缩真的节省了流量?
答:对比开启优化前后的出站流量(VPS 控制面板或 iftop/nethogs),查看 304 比例与 CDN/Varish 命中率,静态文件的平均大小应显著下降;使用 7 天样本以避免偶发波动。
14. 问答:小流量站点是否也需要 CDN?
问:我流量不大,是否还要用 CDN?
答:即便流量小,使用 CDN 可以把静态资源缓存到最近节点,减少峰值回源与加速用户体验。对于按流量计费,重点评估 CDN 的保本点:若 CDN 月费低于可节省的回源费用则值得,否则先用本地缓存+预压缩作为权衡方案。
来源:优化方案实例台湾vps流量收费下的流量压缩与缓存方案