网站静态资源压缩加速教程:从零开始为服务器开启Gzip与
为什么你的网站需要静态资源压缩
当你访问一个网页时,浏览器需要下载 CSS、JavaScript、图片等文件。
如果这些文件未经压缩,体积大、加载慢,尤其对移动端用户很不友好。静态资源压缩 可以在服务器端把文件压缩成更小的尺寸(比如 Gzip 或 Brotli 格式),浏览器收到后再解压还原,整个过程自动完成。
开启后通常能减少 50%~80% 的文件体积,页面加载速度直接提升一个档次。
适用场景:任何使用 Nginx、Apache、或面板(如宝塔)搭建的网站。
本文以 Nginx 为例,宝塔用户也能直接照做。
手把手开启 Nginx 的 Gzip 压缩
Gzip 是最成熟的静态资源压缩方式,兼容所有浏览器。
操作前请确认你有服务器的 root 权限或面板文件编辑权限。
- 定位 Nginx 配置文件
- 宝塔用户:登录面板 → 网站 → 选择站点 → 设置 → 配置文件。
- 命令行用户:
sudo vim /etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf。
- 在 http 块内增加 gzip 配置
- 找到
http { ... }段落,在内部(不要放在 server 或 location 里)添加以下内容:
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_vary on;
gzip_types text/plain text/css text/javascript application/javascript application/json application/xml image/svg+xml;
gzip_disable "msie6";
gzip_comp_level1~9,推荐 6,兼顾压缩率和性能。gzip_types列出了要压缩的文件类型,mime 类型可以用nginx -t再配合常见类型补充。
- 测试配置并重载 Nginx
- 命令行:
nginx -t检查语法,无报错后nginx -s reload。 - 宝塔:直接在面板文件编辑完点击“保存”,系统会自动重载 Nginx。
- 验证 Gzip 是否生效
- 打开浏览器开发者工具(F12)→ 网络(Network)→ 刷新页面 → 点击一个 CSS 或 JS 文件,查看 Response Headers 是否包含
content-encoding: gzip。 - 或者用 curl 命令:
curl -H "Accept-Encoding: gzip" -I https://你的域名/style.css,返回头中有content-encoding: gzip即成功。
升级!配置 Brotli 压缩(性能更佳)
Brotli 比 Gzip 压缩率更高(通常再减少 20%),但需要 Nginx 额外安装模块。
现代浏览器都支持。
- 检查 Nginx 是否已安装 Brotli 模块
- 执行
nginx -V 2>&1 | grep brotli,如果有输出说明已编译。 - 如果没有,需自行编译(推荐使用宝塔的 Nginx 扩展安装,或者找专业的运维处理)。
- 启用 Brotli 配置
在 http 块内添加(与 gzip 平行,不要互相冲突):
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css text/javascript application/javascript application/json application/xml image/svg+xml application/wasm;
- 注意:Brotli 只支持 HTTPS 连接,如果你的站点是 HTTP,浏览器不会接受 Brotli 响应。
- 优先选择:同时开启 Gzip 和 Brotli
- Nginx 会根据浏览器支持的编码自动选择最优压缩方式。配置两套时,需确保
http块中同时包含gzip on;和brotli on;,且gzip_types和brotli_types尽量一致。
避坑指南:别让压缩变成性能黑洞
- 压缩等级不要过高:
gzip_comp_level 9或brotli_comp_level 11压缩率提升有限,但 CPU 负载会翻倍。默认 6 即可。 - 文件类型要写全:常见的
.js的 MIME 是application/javascript,.html是text/html(默认会压缩),.css是text/css。缺了类型就不会压缩。 - 不要在 location 块内重复配置:
gzip指令如果放在server或location中,可能会覆盖全局设置,导致某些请求未压缩。统一放在http块。 - Brotli 对动态请求无效:Brotli 默认只压缩静态文件,如果你的页面是动态生成的(如 PHP 输出),需要额外配置
brotli_static,但新手建议只关注静态资源。
验证效果与高频问题解答
1. 如何确认当前压缩已生效?
- 在浏览器地址栏输入网址后,打开开发者工具的 Network 标签,找到任意一个 CSS/JS 文件,查看 Response Headers 中的
content-encoding,如果显示gzip或br即成功。 - 使用命令行:
curl -I -H "Accept-Encoding: gzip, br" https://你的域名/文件路径,返回头中包含对应编码即可。
2. 为什么我配置了但没生效?
- 先检查
nginx -t是否报错。 - 检查资源是否满足最小体积(
gzip_min_length 1k表示小于 1KB 的文件不压缩)。 - 检查浏览器是否支持(IE6 被
gzip_disable排除)。
3. 压缩后网站访问变慢了?
- 这可能是压缩等级太高导致服务器 CPU 飙升。降低
comp_level到 3~5 试试。 - 如果服务器配置较低,建议只对文件较大的 JS/CSS 压缩,图片不要用 Gzip(图片本身已压缩),可在
gzip_types中移除image/类型。
4. 我已经开启了 CDN,还需要在源站配置吗?
- 如果 CDN 支持实时压缩(如 Cloudflare),可以关闭源站压缩。如果 CDN 只是缓存,建议源站开启压缩,让 CDN 直接回源获取压缩后的资源。
如果你正在处理网站静态资源压缩加速,建议先按本文步骤在测试服务器上验证,再应用到正式环境。
遇到异常时优先回看避坑和高频问题部分,大多数问题都能在这里找到答案。