Nginx支持按http→server→location作用域逐级覆盖gzip配置,可实现域名与路径粒度的差异化压缩;需配齐gzip on、min_length、types、vary等参数才生效,用curl验证响应头最准确。

可以在不同 server 块和 location 块中分别设置 gzip 指令,Nginx 会按作用域逐级覆盖:http → server → location。只要把压缩相关参数写在对应块内,就能实现域名与路径粒度的差异化压缩。
为不同域名配置独立压缩策略
每个 server 块可定义专属 gzip 行为,互不影响:
- 在
server_name www.example.com块中启用高压缩:gzip on; gzip_comp_level 7; gzip_min_length 512; - 在
server_name api.example.com块中关闭压缩以降低 CPU 负担:gzip off;(即使 http 块已设gzip on,此处也会生效) - 对静态资源站如
static.example.com,可精简类型并提高效率:gzip_types image/svg+xml text/css application/javascript;
按路径细化压缩行为
在 location 块中进一步控制,适合区分 API 接口、后台管理、前端资源等场景:
- 对 HTML 页面启用中等压缩:
location / { gzip_comp_level 6; } - 对动态接口路径(如
/api/)降低压缩级别或禁用:location ^~ /api/ { gzip_comp_level 3; }或gzip off; - 对已压缩资源(如图片、字体)跳过处理:
location ~* \.(jpg|jpeg|png|gif|webp|woff2?)$ { gzip off; }
关键参数要配全才能生效
仅设 gzip_comp_level 不够,需配合基础指令确保压缩逻辑完整:
-
gzip on;—— 必须显式开启,否则级别无效 -
gzip_min_length 1024;—— 避免小响应因压缩反而变大 -
gzip_types text/html application/json text/css application/javascript;—— 动态内容(如 PHP 输出的 JSON)必须显式列入 -
gzip_vary on;—— 让 CDN 和浏览器知道响应可能被压缩,避免缓存错乱
验证是否按预期工作
用 curl 检查响应头最直接:
- 访问
curl -H "Accept-Encoding: gzip" -I https://www.example.com/,看是否有Content-Encoding: gzip - 对比
/api/v1/user和/assets/main.js的压缩级别差异,确认 location 级别配置已生效 - 注意:浏览器开发者工具的 Network 面板有时会自动解压展示,建议优先用命令行验证原始响应头











