最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 源码安装时如何解决依赖缺失与编译报错问题
时间:2026-08-23 20:18:49 编辑:袖梨 来源:一聚教程网
源码安装Nginx失败主因是开发包缺失或装错,须安装带-dev/-devel后缀的pcre2、zlib、openssl开发包及Development Tools,并验证/usr/include下pcre2.h、ssl.h、zlib.h等头文件是否存在。
源码安装 Nginx 失败,九成以上是依赖没装全或装错了包——不是版本不兼容,而是开发头文件和链接库根本没到位。关键要分清“运行库”和“开发包”,只装 libpcre3 或 openssl 不顶用,configure 阶段必须看到 pcre2.h、ssl.h、zlib.h 这些头文件,以及对应的 .so 文件。
先确认缺什么,别靠猜
configure 报错信息很简略,真正线索在 config.log 文件里。但更快的方法是直接查关键文件是否存在:
- PCRE2(Nginx 1.21+ 必需):
ls /usr/include/pcre2.h &>/dev/null && echo ok || echo missing - OpenSSL 开发头文件:
ls /usr/include/openssl/ssl.h &>/dev/null && echo ok || echo missing - Zlib 头文件:
ls /usr/include/zlib.h &>/dev/null && echo ok || echo missing - 内核头文件(make 阶段报 SOCK_NONBLOCK 未声明时用):
ls /usr/include/linux/version.h &>/dev/null && echo ok || echo missing
按系统装对开发包,注意名字差异
不同发行版包名不同,装错就白忙。重点记住:带 -dev(Debian/Ubuntu)或 -devel(RHEL/CentOS/openEuler/麒麟)后缀的才是开发包。
-
CentOS/RHEL/Rocky/AlmaLinux 8+:
sudo dnf install -y pcre2-devel zlib-devel openssl-devel kernel-headers -
CentOS 7(默认无 pcre2):
sudo yum install -y epel-release && sudo yum install -y pcre2-devel zlib-devel openssl-devel kernel-headers -
Ubuntu/Debian 20.04+:
sudo apt update && sudo apt install -y libpcre2-dev zlib1g-dev libssl-dev linux-headers-$(uname -r) -
openEuler/麒麟 V10 SP1(基于 openEuler 20.03 LTS):
sudo dnf install -y pcre2-devel zlib-devel openssl-devel kernel-headers,注意检查仓库是否启用 baseos/appstream
基础工具链不能少,否则 configure 都跑不起来
gcc、make、autoconf 这些不是 Nginx 的依赖,而是编译器本身的运行前提。最小化系统常缺这个:
- RHEL 系:
sudo dnf groupinstall "Development Tools" - Ubuntu/Debian:
sudo apt install build-essential perl - 验证命令:
gcc --version && make --version && pkg-config --version,全部有输出才算齐
手动指定路径的情况要谨慎处理
只有两种情况才需要自己编译 PCRE2 或 OpenSSL:一是系统仓库真没对应开发包(如老旧 RHEL 7),二是必须锁定某个特定版本(比如安全合规要求 PCRE2 v10.42)。此时要注意:
- PCRE2 编译后安装到
/usr/local/pcre2,Nginx configure 要写:--with-pcre=/usr/local/pcre2(不是--with-pcre=xxx/src) - OpenSSL 自编译后,configure 要加:
--with-openssl=/path/to/openssl-source,且需确保auto/lib/openssl/conf文件里路径正确 - 每次改参数前,先清理:
make clean或删掉整个源码目录重解压,避免缓存干扰