可在server块中单独开启Gzip压缩,适用于多站点差异化策略场景;必须置于server顶层、显式配置gzip_types含application/x-httpd-php、location中PHP路径需重复启用,验证需检查Content-Encoding: gzip响应头。

可以在 server 块中单独开启 Gzip 压缩,适用于多站点部署、需差异化压缩策略的场景。但要注意:不是所有指令都能在 server 级生效,部分配置必须配合上下文才能起作用。
确认模块已启用
执行以下命令检查 Nginx 是否编译了 gzip 模块:
nginx -V 2>&1 | grep -o with-http_gzip_module
若无输出,说明模块缺失,gzip on 会报错 unknown directive "gzip",此时需重新编译 Nginx 并添加 --with-http_gzip_module 参数。
在 server 块中写对位置和内容
必须把 gzip 配置放在 server { } 的顶层(即不在 location 或 if 内),否则可能不生效或仅局部生效。推荐基础配置如下:
gzip on;-
gzip_min_length 1024;—— 小于 1KB 的响应跳过压缩 -
gzip_comp_level 5;—— 平衡压缩率与 CPU 开销 -
gzip_types text/plain text/css application/javascript application/json text/xml application/xml+rss image/svg+xml application/x-httpd-php;—— 必须显式包含application/x-httpd-php,否则 PHP 动态页面不会被压缩 -
gzip_vary on;—— 避免代理缓存混淆 -
gzip_http_version 1.1;—— 提升兼容性,尤其对旧客户端更稳妥
PHP 动态内容要额外注意
如果使用 FastCGI(如 php-fpm),仅在 server 块设 gzip on 不够,还需在 PHP 处理的 location ~ \.php$ 块中再写一遍:
gzip on;gzip_types application/x-httpd-php;
否则浏览器请求 PHP 页面时,Nginx 可能不触发压缩,导致 Content-Encoding: gzip 缺失。
验证是否真正生效
完成配置后执行:
-
sudo nginx -t—— 检查语法 -
sudo nginx -s reload—— 平滑重载
然后用以下任一方式验证:
- 浏览器开发者工具 → Network → 找一个 JS/CSS/PHP 页面 → 查看 Response Headers 中是否有
Content-Encoding: gzip - 终端运行:
curl -H "Accept-Encoding: gzip" -I https://yoursite.com/test.php,观察返回头


















