nginx 不支持物理压缩存储,但可通过 gzip 配置实现动态压缩传输;需在 http/server 块启用 gzip 并设置 types、min_length、comp_level、vary 等参数,配合静态缓存提升性能,推荐动态压缩而非预压缩。

nginx.conf 本身不提供“压缩存储”功能,它不能把文件物理压缩后存到磁盘。但可以通过配置让 Nginx 在响应时动态启用 gzip 压缩传输,大幅减少静态资源(如 CSS、JS、HTML、SVG 等)的网络传输体积,效果等同于“压缩交付”,这是生产环境的标准做法。
启用 gzip 压缩传输
在 http 或 server 块中开启 gzip,并设置合理参数:
- gzip on; —— 启用压缩
- gzip_types text/plain text/css application/javascript application/json image/svg+xml; —— 明确指定需压缩的 MIME 类型(务必包含 SVG、JS、CSS;图片如 PNG/JPG 本身已压缩,一般不加)
- gzip_min_length 256; —— 小于该字节的响应不压缩(避免压缩过小文本得不偿失)
- gzip_comp_level 6; —— 压缩级别(1–9),6 是速度与压缩率的较好平衡
-
gzip_vary on; —— 自动添加
Vary: Accept-Encoding响应头,确保 CDN 或代理正确缓存不同编码版本
配合静态文件缓存提升效率
压缩只是传输优化,搭配强缓存可减少重复请求:
- 在
location块中对静态资源设置 expires 或 add_header Cache-Control - 例如:location ~* \.(js|css|svg|woff2?)$ { expires 1y; add_header Cache-Control "public, immutable"; }
- 注意:
immutable可避免浏览器在刷新时发送条件请求,配合 gzip 更高效
验证是否生效
部署后用浏览器开发者工具检查响应头和大小:
- 查看响应头是否有 Content-Encoding: gzip
- 对比 Network 面板中 “Size”(传输大小)与 “Content”(原始大小),差值明显说明压缩生效
- 也可用 curl 测试:curl -H "Accept-Encoding: gzip" -I http://your.site/style.css,观察是否返回 gzip 编码
不建议手动预压缩文件
虽然可通过 gzip_static on; 让 Nginx 直接返回预生成的 .gz 文件(如 app.js.gz),但这需要构建流程额外生成并维护双版本文件,易出错且增加部署复杂度。除非有特殊 CDN 或边缘缓存要求,否则动态 gzip 更简洁可靠。











