CentOS Stream 源码编译安装 Nginx 1.31.0(静态依赖版)
前言
本文介绍如何在 CentOS Stream 9/10 上通过源码编译安装 Nginx 1.31.0。
与使用 dnf 安装系统依赖包不同,本文采用静态编译 方式,即直接下载 zlib、PCRE2、OpenSSL 的源码并与 Nginx 一同编译。这种方式不依赖系统仓库,适用于网络受限或仓库不完整的场景,且生成的 Nginx 可移植性更强。
一、准备工作
1.1 安装编译工具
bash
sudo dnf groupinstall -y "Development Tools"
如果
dnf仓库不可用,请确保系统已安装gcc和make,可通过gcc --version检查。
1.2 创建 Nginx 运行用户
bash
sudo useradd -r -s /sbin/nologin nginx
二、下载源码包(Nginx + 三个依赖)
统一放在 /usr/local/src 目录:
bash
sudo mkdir -p /usr/local/src
cd /usr/local/src
2.1 Nginx 1.31.0
bash
sudo wget https://nginx.org/download/nginx-1.31.0.tar.gz
校验 SHA-256(可选但推荐):
bash
sha256sum nginx-1.31.0.tar.gz
# 输出应该为:6d5b00d45393af2e4e7c52a442d2a198f0ccbc7678ed062a46f403edd833ebaa
2.2 zlib 1.3.1(提供 gzip 压缩支持)
bash
sudo wget https://zlib.net/zlib-1.3.1.tar.gz
官方 SHA-256:38ef96a8aff9be6350225447ce6e0a200d53e9e41f6fd5e6301b0854514c3b92
2.3 PCRE2 10.43(提供正则表达式支持,Nginx 推荐使用 PCRE2)
bash
sudo wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.gz
如果 GitHub 下载慢,可使用 Debian 镜像:
http://deb.debian.org/debian/pool/main/p/pcre2/pcre2_10.43.orig.tar.gz
2.4 OpenSSL 3.0.14(提供 HTTPS 支持)
bash
sudo wget https://www.openssl.org/source/openssl-3.0.14.tar.gz
官方 SHA-256:582e9d7c011f980dfbfaab3f58e6f1947146335a9d8ab38bfb4b80f59c12b713
三、解压所有源码包
bash
cd /usr/local/src
sudo tar -xzf nginx-1.31.0.tar.gz
sudo tar -xzf zlib-1.3.1.tar.gz
sudo tar -xzf pcre2-10.43.tar.gz
sudo tar -xzf openssl-3.0.14.tar.gz
解压后得到四个目录:
nginx-1.31.0zlib-1.3.1pcre2-10.43openssl-3.0.14
四、配置 Nginx 编译选项(静态链接依赖)
进入 Nginx 源码目录:
bash
cd /usr/local/src/nginx-1.31.0
执行 ./configure,通过 --with- 参数指定三个依赖的源码路径(Nginx 会自动编译并静态链接它们):
bash
cd /root/vul_test/nginx-1.31.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-pcre=/root/vul_test/pcre2-10.43 \
--with-zlib=/root/vul_test/zlib-1.3.1 \
--with-openssl=/root/vul_test/openssl-3.6.2
参数说明:
--prefix:安装目录--user/--group:运行时用户/组--with-http_ssl_module:启用 HTTPS--with-http_stub_status_module:启用状态监控页面--with-http_v2_module:启用 HTTP/2 协议--with-pcre2:静态编译 PCRE2--with-zlib:静态编译 zlib--with-openssl:静态编译 OpenSSL


五、编译与安装
bash
make -j$(nproc) # 使用全部 CPU 核心加速编译
sudo make install


编译时间取决于服务器配置,通常几分钟即可完成。
六、配置 systemd 服务
创建 /etc/systemd/system/nginx.service 文件:
bash
sudo tee /etc/systemd/system/nginx.service > /dev/null <<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
启动 Nginx 并设置开机自启:
bash
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx
七、防火墙配置(可选)
如果防火墙开启,放行 HTTP/HTTPS 端口:
bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
八、验证安装
bash
curl http://localhost
或者在浏览器中访问 http://你的服务器IP,看到 Nginx 欢迎页面即表示成功。
九、常见问题排障
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
configure: error: the HTTP rewrite module requires the PCRE2 library. |
--with-pcre2 路径错误 |
确认路径指向解压后的 pcre2-10.43 目录 |
error: the HTTP gzip module requires the zlib library |
--with-zlib 路径错误 |
检查 zlib 源码路径是否正确 |
error: ... SSL modules require the OpenSSL library |
--with-openssl 路径错误 |
确认 openssl 源码路径 |
make: gcc: Command not found |
缺少 gcc 编译器 | 安装 gcc 和 make(若 dnf 可用) |
启动时 nginx: [emerg] getpwnam("nginx") failed |
用户 nginx 不存在 |
执行 sudo useradd -r -s /sbin/nologin nginx |
十、总结
本文完全绕过系统包管理器,通过静态编译 方式成功安装 Nginx 1.31.0 + PCRE2 + zlib + OpenSSL。
该方法的优点:
- 不依赖仓库,适合离线或网络受限环境
- 版本可控,所有依赖版本由你指定
- 可移植性强,编译后的 Nginx 可复制到其他同构系统运行
三个依赖的官方下载地址汇总(供博客引用):
- zlib 1.3.1:
https://zlib.net/zlib-1.3.1.tar.gz - PCRE2 10.43:
https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.43/pcre2-10.43.tar.gz - OpenSSL 3.0.14:
https://www.openssl.org/source/openssl-3.0.14.tar.gz
(可选)如果你希望使用更新的 OpenSSL 3.5.x LTS 版本,只需替换下载地址和 ./configure 中的路径即可。