应优先在 nginx 的 http 块中全局启用 gzip 压缩,配置 gzip on 及相关参数,并确保 php.ini 中 zlib.output_compression 关闭,以避免冲突且获得最佳性能。

如果您正在使用 PHP 搭建网站,并通过 Nginx 作为 Web 服务器,但发现页面加载缓慢、网络传输体积偏大,则很可能是响应内容未启用 Gzip 压缩。以下是针对该架构下实现 Gzip 压缩的多种可行方法:
一、在 Nginx 的 http 块中全局启用 Gzip
此方式由 Nginx 在响应发送前统一压缩所有符合条件的动态与静态内容,不依赖 PHP 执行过程,性能最优且资源开销最低。Nginx 对 PHP-FPM 返回的 text/html、application/x-httpd-php 等类型响应同样适用压缩规则。
1、打开 Nginx 主配置文件 D:\phpEnv\Nginx\conf\nginx.conf(Windows phpEnv 环境)或 /etc/nginx/nginx.conf(Linux 环境)。
2、在 http { } 块内(非 server 或 location 块),插入以下配置段:
gzip on;
gzip_min_length 1024;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
gzip_proxied any;
gzip_types text/plain text/css text/javascript application/javascript application/json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml font/opentype font/ttf image/x-icon application/x-httpd-php;
3、保存文件后执行 nginx -t 验证语法是否正确。
4、若测试通过,运行 nginx -s reload 重载配置使生效。
二、在站点 server 块中单独启用 Gzip
此方式适用于多站点共存环境,可为特定 PHP 站点独立启用压缩,避免全局配置影响其他服务。需确保 gzip 指令位于 server 块内、location 块外,且显式包含 application/x-httpd-php 类型以覆盖 PHP 动态输出。
1、打开对应站点配置文件,路径通常为 D:\phpEnv\Nginx\vhost\your-site.conf(phpEnv)或 /etc/nginx/conf.d/your-site.conf(Linux)。
2、在 server { } 块内、location / { } 外层插入以下指令:
gzip on;
gzip_vary on;
gzip_min_length 1;
gzip_types text/html application/json text/css application/javascript text/plain application/x-httpd-php;
3、特别注意:若该 server 块中存在 location ~ \.php$ { },需在其中重复 gzip on; 及相关指令,否则 fastcgi 返回的 PHP 响应将不被压缩。
4、保存后重启 Nginx 服务(phpEnv 中须点击面板右上角“重启 Nginx”按钮,非仅“重载”)。
三、通过 php.ini 关闭 zlib.output_compression 避免冲突
当 Nginx 已启用 Gzip 时,PHP 层的 zlib 输出压缩必须禁用,否则将导致双重压缩、header 冲突或 Nginx 警告 “duplicate Content-Encoding header”。此步骤是 Nginx 方案生效的前提条件。
1、定位当前 PHP 使用的 php.ini 文件,可通过 phpinfo() 查看 “Loaded Configuration File” 路径,例如 C:\phpenv\versions\8.4\php.ini。
2、搜索 zlib.output_compression,将其值设为 Off 或注释掉该行。
3、同时确认 output_buffering 已启用(默认通常为 4096 或 On),否则部分扩展行为异常。
4、保存后,在 phpEnv 控制面板中点击 “重启 PHP”,或重启整个 Web 服务。
四、在 PHP 代码中启用 ob_gzhandler(仅限特殊场景)
该方式适用于无法修改服务器配置的共享主机环境,或仅对个别脚本启用压缩。但在 Nginx + PHP-FPM 架构下极易引发冲突,仅当确认 Nginx 未启用 gzip 且 zlib 扩展已加载时方可使用。
1、在 PHP 脚本最开头(任何输出之前,包括空格、BOM、echo 或 HTML)插入以下代码:
if (!headers_sent() && extension_loaded('zlib') && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 'gzip')) {
ob_start('ob_gzhandler');
}
2、确保脚本中未调用 zlib.output_compression = On,且未手动设置 Content-Encoding: gzip 头。
3、验证时需使用 curl 命令检查响应头,避免浏览器缓存干扰:curl -I -H "Accept-Encoding: gzip" http://127.0.0.1/test.php。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











