源码安装Nginx需先确认三类核心依赖:GCC编译器(gcc --version)、PCRE正则库(pcre-config --version)、zlib与OpenSSL(openssl version、zlib-config --version);再按发行版选用对应开发包——RHEL/CentOS 7用pcre-devel,8+用pcre2-devel,Ubuntu/Debian用libpcre2-dev和libssl-dev,Alpine用pcre2-dev和openssl-dev。

源码安装 Nginx 时,不同发行版的包名、库名、开发头文件路径甚至底层 libc(glibc vs musl)都可能不同,直接照搬命令容易失败。关键不是“统一写法”,而是理解依赖的本质,并按系统特性适配。
先确认三类核心依赖是否就位
无论什么发行版,Nginx 编译都依赖三样东西:C 编译器、正则支持(PCRE)、压缩与加密(zlib + OpenSSL)。检查方式比盲目安装更可靠:
-
gcc:运行
gcc --version,无输出就装编译工具集 -
pcre:运行
pcre-config --version或pkg-config --modversion libpcre;Ubuntu/Debian 要libpcre2-dev,RHEL/CentOS 8+ 是pcre2-devel,7 是pcre-devel -
openssl:运行
openssl version -a看版本和编译路径;开发包名在 RHEL 系是openssl-devel,Debian 系是libssl-dev -
zlib:运行
zlib-config --version或查pkg-config --modversion zlib;对应开发包为zlib-devel(RHEL)或zlib1g-dev(Debian)
按发行版选择对应依赖安装命令
别硬记名字,记住规律:开发包名通常带 -dev(Debian系)或 -devel(RHEL系),基础工具组叫法也不同:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
RHEL/CentOS 8+:
sudo dnf groupinstall "Development Tools" && sudo dnf install -y gcc openssl-devel pcre2-devel zlib-devel -
RHEL/CentOS 7:
sudo yum groupinstall "Development Tools" && sudo yum install -y gcc openssl-devel pcre-devel zlib-devel -
Ubuntu/Debian:
sudo apt update && sudo apt install -y build-essential libssl-dev libpcre2-dev zlib1g-dev -
Alpine Linux(musl 环境):
apk add --no-cache build-base openssl-dev pcre2-dev zlib-dev
遇到“configure 检查通过但启动报错”怎么办
常见于 OpenSSL 版本太低或模块未真正启用。例如:
- 报
unknown directive "ssl":说明--with-http_ssl_module被 configure 静默跳过,回去检查openssl-devel是否真装上,再重跑./configure并看终端末尾有没有checking for OpenSSL library ... found - HTTP/2 启用失败:CentOS 7 默认 OpenSSL 1.0.2k 支持 ALPN,可用;但若系统 OpenSSL 太旧(如 <1.0.2),configure 不报错,启动后
curl -I --http2会降级。此时不要全局升级 OpenSSL,改用--with-openssl=/path/to/openssl-source静态链接更稳妥 - 第三方模块加载失败:确保 configure 加了
--add-dynamic-module=...,且 nginx.conf 中有load_module modules/xxx.so;,路径必须与make install后实际位置一致
想跨发行版通用?考虑静态编译方案
如果要在 Ubuntu、CentOS、UOS、openEuler 等多个环境部署同一份二进制,推荐用 Alpine Linux + Docker 构建静态链接版:
- 在 Alpine 容器里编译,用
--with-openssl=../openssl-src --with-zlib=../zlib-src指向源码,配合--static(需 patch)或 musl-gcc 工具链 - 生成的
nginx二进制不依赖系统 glibc,拷过去就能跑,连ldd nginx都显示not a dynamic executable - 适合内网交付、边缘设备或容器镜像精简场景,代价是体积略大、调试符号需手动保留

















