可安全跳过PCRE、OpenSSL、zlib及HTTP/2相关检查,前提是明确禁用对应模块:--without-http_rewrite_module且--without-pcre、--without-http_ssl_module、--without-http_gzip_module、不加--with-http_v2_module;不可跳过gcc、make、glibc-devel及--prefix写入权限校验。

源码编译 Nginx 时,configure 脚本会自动检测系统环境(如 PCRE、OpenSSL、zlib 等),但某些检查其实可以跳过——前提是**你明确知道对应功能不需要,且不依赖其关联模块**。跳过不是“绕过报错”,而是通过参数控制检测逻辑,让 configure 不触发相关检查。
哪些检查可以安全跳过
以下检查在满足条件时可跳过,避免因缺失开发包导致 configure 中断:
-
PCRE 检查:如果你不使用
rewrite、return、if等正则指令,且禁用了--with-http_rewrite_module,那么可加--without-pcre。configure 就不会查找pcre-devel或报错。 -
OpenSSL 检查:若确定不启用 HTTPS(即不加
--with-http_ssl_module),可直接加--without-http_ssl_module。configure 不再检查openssl-devel。 -
Zlib 检查:若不启用 gzip 压缩(禁用
--with-http_gzip_module和--with-http_gzip_static_module),加--without-http_gzip_module后,configure 也不会尝试链接 zlib。 -
HTTP/2 支持检查:
--with-http_v2_module依赖 OpenSSL 1.0.2+ 且必须开启 SSL 模块。如果不打算用 HTTP/2,就不要加这个参数,自然跳过相关验证。
跳过检查的正确写法
关键原则是:先禁用模块,再让依赖检查失效。不能只删开发包却不告诉 configure —— 那会直接报错退出。
- 错误做法:
yum remove pcre-devel && ./configure --prefix=/opt/nginx→ 报错the HTTP rewrite module requires the PCRE library - 正确做法:
./configure --prefix=/opt/nginx --without-http_rewrite_module --without-pcre→ 不查 PCRE,也不编译 rewrite 模块 - 同理,纯静态服务且不用 HTTPS:
--without-http_ssl_module --without-http_v2_module --without-http_gzip_module
不能跳过的核心检查
以下检查不建议跳过,否则可能导致编译失败或运行异常:
- C 编译器(gcc)和 make 工具:没有它们根本无法生成二进制,必须安装
- 基础 C 库头文件(glibc-devel 等):系统级依赖,跳过会导致链接失败
-
--prefix路径的写入权限:configure 会校验目标目录是否可写,不可跳过
验证是否真正跳过
执行 ./configure ... 后,快速确认两点:
- 输出中不再出现
checking for PCRE library、checking for OpenSSL library等字样 - 最终生成的
objs/Makefile里没有-lpcre、-lssl、-lz等链接项 - 编译完成后运行
./objs/nginx -V,确认 configure arguments 中包含你写的--without-xxx,且无冲突参数


















