nginx 编译时需 zlib 源码而非仅 zlib-devel 包,因其 configure 阶段会调用 zlib 内部 configure 脚本并依赖源码中的 configure、makefile.in 等文件;--with-zlib=/path/to/zlib-source 必须指向解压后的源码根目录,nginx 会在构建时自动编译该 zlib 子模块,手动安装反而引发冲突。

为什么必须用源码,不能只 yum install?
系统包管理器(如 yum install zlib-devel)提供的是已编译的库文件和头文件,适用于大多数常规编译场景;但 Nginx 的 ./configure 在检测 zlib 时,会尝试调用其内部的 configure 脚本并检查构建环境一致性。尤其在交叉编译、定制优化(如指定 CPU 指令集)或使用较新 zlib 版本时,Nginx 官方推荐显式指定 --with-zlib=/path/to/zlib-source,此时它需要的是完整的源码目录(含 configure、Makefile.in 等),而非安装后的库路径。
下载与解压 zlib 源码
前往官方站点获取稳定版源码(推荐 zlib 1.3.x 或 1.2.13+,兼容性好且修复了旧版安全问题):
- 执行命令下载(以 zlib-1.3.1 为例):
wget https://zlib.net/zlib-1.3.1.tar.gz - 解压到统一源码目录(如
/usr/local/src):tar -zxvf zlib-1.3.1.tar.gz -C /usr/local/src/ - 确认路径存在且可读:
ls -l /usr/local/src/zlib-1.3.1/(应看到configure、Makefile.in、zlib.h等)
无需单独 configure/make/install
Nginx 编译过程会自动进入该 zlib 源码目录完成子模块构建,你不需要也不应该先运行:
cd /usr/local/src/zlib-1.3.1 && ./configuremake && make install
这些步骤由 Nginx 的 Makefile 在内部触发。手动安装反而可能导致版本冲突或路径混淆。
在 Nginx configure 中正确引用
进入 Nginx 源码目录后,调用 ./configure 时明确指定 zlib 源码路径:
./configure \--prefix=/usr/local/nginx \--with-http_gzip_static_module \--with-zlib=/usr/local/src/zlib-1.3.1 \--with-pcre=/usr/local/src/pcre-8.45 \--with-openssl=/usr/local/src/openssl-3.0.13
注意:--with-zlib 后跟的是 解压后的源码根目录,不是 .tar.gz 文件,也不是 /usr/lib64 这类安装路径。
验证是否生效
编译安装完成后,检查 Nginx 是否链接了 zlib:
- 运行
/usr/local/nginx/sbin/nginx -V 2>&1 | grep -i zlib,输出中应出现zlib字样 - 启动后,在配置中开启 gzip:
gzip on;gzip_types text/plain application/json; - 用 curl 测试响应头:
curl -H "Accept-Encoding: gzip" -I http://localhost/,返回中应含Content-Encoding: gzip











