nginx Linux 软件包安装:官方仓库全指南
在 Linux 服务器上部署 nginx 时,发行版自带仓库中的版本往往滞后于官方发布,既拿不到最新的安全修复,也用不上新特性。
nginx 官方为主流 Linux 发行版维护了预编译的软件包仓库,配置一次仓库后即可通过系统包管理器安装与升级 nginx,并借助 GPG 签名验证软件包来源。
官方软件包的核心优势:
- 版本新:提供稳定版(stable)与主线版(mainline)两条更新线,可按需切换。
- 可验证:所有软件包由官方签名密钥签署,安装时可校验指纹,防止被篡改。
- 易维护:接入系统包管理器(
yum/apt/zypper/apk),升级卸载与普通软件一致。 - 模块化:核心包之外,以独立软件包形式提供动态模块,按需加载。
本文将从支持的发行版、各系统的仓库配置与安装步骤、源码包、动态模块及签名验证等方面,帮助你在生产环境中可靠地部署官方 nginx。
目录
- 1. 支持的发行版及版本
- 2. 安装说明
- 3. RHEL 及其衍生版
- 4. Debian
- 5. Ubuntu
- 6. SLES
- 7. Alpine
- 8. Amazon Linux
- 9. 源码包
- 10. 动态模块
- 11. 签名验证
- 12. 总结
- 13. 参考资料
1. 支持的发行版及版本
nginx 软件包适用于以下 Linux 发行版及版本。
1.1 RHEL 及其衍生版
| 版本 | 支持的平台 |
|---|---|
| 8.x | x86_64、aarch64/arm64 |
| 9.x | x86_64、aarch64/arm64 |
| 10.x | x86_64、aarch64/arm64 |
1.2 Debian
| 版本 | 支持的平台 |
|---|---|
| 11.x “bullseye” | x86_64、aarch64/arm64 |
| 12.x “bookworm” | x86_64、aarch64/arm64 |
| 13.x “trixie” | x86_64、aarch64/arm64 |
1.3 Ubuntu
| 版本 | 支持的平台 |
|---|---|
| 22.04 “jammy” | x86_64、aarch64/arm64 |
| 24.04 “noble” | x86_64、aarch64/arm64 |
| 26.04 “resolute” | x86_64、aarch64/arm64 |
1.4 SLES
| 版本 | 支持的平台 |
|---|---|
| 15 SP6+ | x86_64 |
| 16 | x86_64、aarch64/arm64 |
1.5 Alpine
| 版本 | 支持的平台 |
|---|---|
| 3.21 | x86_64、aarch64/arm64 |
| 3.22 | x86_64、aarch64/arm64 |
| 3.23 | x86_64、aarch64/arm64 |
| 3.24 | x86_64、aarch64/arm64 |
1.6 Amazon Linux
| 版本 | 支持的平台 |
|---|---|
| 2023 | x86_64、aarch64/arm64 |
2. 安装说明
在首次于新机器上安装 nginx 之前,需要先配置 nginx 软件包仓库。配置完成后,即可从该仓库安装并持续更新 nginx。
后续各章节按发行版分别给出配置步骤,选择与你系统匹配的一节即可。
提示:官方仓库默认启用稳定版(stable),主线版(mainline)默认禁用。需要主线版时按对应章节的说明手动切换。
3. RHEL 及其衍生版
本节适用于 Red Hat Enterprise Linux 及其衍生版本,例如 CentOS、Oracle Linux、Rocky Linux、AlmaLinux。
安装先决条件:
sudo yum install yum-utils # 安装 yum-config-manager 等工具要设置 yum 仓库,创建名为 /etc/yum.repos.d/nginx.repo 的文件,内容如下:
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true默认使用稳定版 nginx 软件包仓库。如需使用主线版,运行以下命令:
sudo yum-config-manager --enable nginx-mainline # 启用 mainline 仓库安装 nginx:
sudo yum install nginx当提示接受 GPG 密钥时,验证指纹是否匹配 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62,匹配则接受该密钥。
4. Debian
安装先决条件:
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring导入官方 nginx 签名密钥,以便 apt 验证软件包真实性。获取密钥:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null验证下载的文件是否包含正确的密钥:
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg输出应包含完整指纹 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62,如下所示:
pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <signing-key@nginx.com>提示:输出中可能包含用于签署软件包的其他密钥,属正常现象。
设置稳定版 nginx 软件包的 apt 仓库:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list如需使用主线版,改为运行:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list设置仓库优先级,优先使用官方软件包而非发行版自带的:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx安装 nginx:
sudo apt update
sudo apt install nginx5. Ubuntu
安装先决条件:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring导入官方 nginx 签名密钥,以便 apt 验证软件包真实性。获取密钥:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null验证下载的文件是否包含正确的密钥:
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg输出应包含完整指纹 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62,如下所示:
pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <signing-key@nginx.com>提示:输出中可能包含用于签署软件包的其他密钥,属正常现象。
设置稳定版 nginx 软件包的 apt 仓库:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list如需使用主线版,改为运行:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list设置仓库优先级,优先使用官方软件包而非发行版自带的:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx安装 nginx:
sudo apt update
sudo apt install nginx6. SLES
安装先决条件:
sudo zypper install curl ca-certificates gpg2设置稳定版 nginx 包的 zypper 仓库:
sudo zypper addrepo --gpgcheck --type yum --refresh --check \
'https://nginx.org/packages/sles/$releasever_major' nginx-stable如需使用主线版,改为运行:
sudo zypper addrepo --gpgcheck --type yum --refresh --check \
'https://nginx.org/packages/mainline/sles/$releasever_major' nginx-mainline导入官方 nginx 签名密钥,以便 zypper/rpm 验证软件包真实性。获取密钥:
curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key验证下载的文件是否包含正确的密钥:
gpg --with-fingerprint /tmp/nginx_signing.key输出应包含完整指纹 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62,如下所示:
pub 2048R/7BD9BF62 2011-08-19 [expires: 2027-05-24]
Key fingerprint = 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
uid nginx signing key <signing-key@nginx.com>将密钥导入 rpm 数据库:
sudo rpmkeys --import /tmp/nginx_signing.key安装 nginx:
sudo zypper install nginx7. Alpine
安装先决条件:
sudo apk add openssl curl ca-certificates设置稳定版 nginx 软件包的 apk 仓库:
printf "%s%s%s%s\n" \
"@nginx " \
"https://nginx.org/packages/alpine/v" \
`egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release` \
"/main" \
| sudo tee -a /etc/apk/repositories如需使用主线版,改为运行:
printf "%s%s%s%s\n" \
"@nginx " \
"https://nginx.org/packages/mainline/alpine/v" \
`egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release` \
"/main" \
| sudo tee -a /etc/apk/repositories导入官方 nginx 签名密钥,以便 apk 验证软件包真实性。获取密钥:
curl -o /tmp/nginx_signing.rsa.pub https://nginx.org/keys/nginx_signing.rsa.pub验证下载的文件是否包含正确的密钥:
openssl rsa -pubin -in /tmp/nginx_signing.rsa.pub -text -noout输出应包含以下模数(Modulus):
Public-Key: (2048 bit)
Modulus:
00:fe:14:f6:0a:1a:b8:86:19:fe:cd:ab:02:9f:58:
2f:37:70:15:74:d6:06:9b:81:55:90:99:96:cc:70:
5c:de:5b:e8:4c:b2:0c:47:5b:a8:a2:98:3d:11:b1:
f6:7d:a0:46:df:24:23:c6:d0:24:52:67:ba:69:ab:
9a:4a:6a:66:2c:db:e1:09:f1:0d:b2:b0:e1:47:1f:
0a:46:ac:0d:82:f3:3c:8d:02:ce:08:43:19:d9:64:
86:c4:4e:07:12:c0:5b:43:ba:7d:17:8a:a3:f0:3d:
98:32:b9:75:66:f4:f0:1b:2d:94:5b:7c:1c:e6:f3:
04:7f:dd:25:b2:82:a6:41:04:b7:50:93:94:c4:7c:
34:7e:12:7c:bf:33:54:55:47:8c:42:94:40:8e:34:
5f:54:04:1d:9e:8c:57:48:d4:b0:f8:e4:03:db:3f:
68:6c:37:fa:62:14:1c:94:d6:de:f2:2b:68:29:17:
24:6d:f7:b5:b3:18:79:fd:31:5e:7f:4c:be:c0:99:
13:cc:e2:97:2b:dc:96:9c:9a:d0:a7:c5:77:82:67:
c9:cb:a9:e7:68:4a:e1:c5:ba:1c:32:0e:79:40:6e:
ef:08:d7:a3:b9:5d:1a:df:ce:1a:c7:44:91:4c:d4:
99:c8:88:69:b3:66:2e:b3:06:f1:f4:22:d7:f2:5f:
ab:6d
Exponent: 65537 (0x10001)将密钥移动到 apk 可信密钥存储中:
sudo mv /tmp/nginx_signing.rsa.pub /etc/apk/keys/安装 nginx:
sudo apk add nginx@nginx按需安装动态模块(示例:image-filter 与 njs):
sudo apk add nginx-module-image-filter@nginx nginx-module-njs@nginx8. Amazon Linux
安装先决条件:
sudo yum install yum-utils8.1 Amazon Linux 2
创建名为 /etc/yum.repos.d/nginx.repo 的文件,内容如下:
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/amzn2/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
priority=9
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/amzn2/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
priority=98.2 Amazon Linux 2023
创建名为 /etc/yum.repos.d/nginx.repo 的文件,内容如下:
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/amzn/2023/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
priority=9
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/amzn/2023/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
priority=98.3 切换主线版与安装
默认使用稳定版 nginx 软件包仓库。如需使用主线版,运行:
sudo yum-config-manager --enable nginx-mainline安装 nginx:
sudo yum install nginx当提示接受 GPG 密钥时,验证指纹是否匹配 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62,匹配则接受该密钥。
9. 源码包
打包源可以在 打包源仓库 中找到。
master 分支包含当前主线版本的打包源码,stable-* 分支包含稳定版的最新源码。要构建二进制包,在以下目录中运行 make:
- Debian / Ubuntu 系统:
debian/目录 - RHEL 及其衍生版、SLES、Amazon Linux:
rpm/SPECS/目录 - Alpine 系统:
alpine/目录
打包源码采用与 nginx 相同的 2-clause BSD-like license 许可证进行分发。
10. 动态模块
主 nginx 包在构建时包含了所有无需额外依赖库的模块。自 1.9.11 版本起,nginx 支持动态模块,以下模块以动态方式构建并作为独立软件包发布:
nginx-module-geoip
nginx-module-image-filter
nginx-module-njs
nginx-module-perl
nginx-module-xslt自 1.25.3 版本起,以下模块作为独立软件包发布:
nginx-module-otel自 1.29.1 版本起,以下模块作为独立软件包提供:
nginx-module-acme11. 签名验证
由于官方 PGP 密钥与软件包位于同一台服务器上,二者具有同等的可信度。强烈建议额外验证下载的 PGP 密钥的真实性。
PGP 具有“信任网络(Web of Trust)”的概念:当一个密钥被其他人的密钥签名,该密钥又被另一个密钥签名,以此类推。通常可以从任意密钥构建一条链,链的末端指向你个人认识并信任的某人的密钥,从而验证链中第一个密钥的真实性。该概念在 GPG 简易指南 中有详细描述。官方密钥拥有足够的签名,其真实性相对容易验证。
12. 总结
nginx 官方软件包仓库为主流 Linux 发行版提供了预编译、可验证、易维护的安装方式,避免了发行版自带版本滞后的问题。其稳定版与主线版双轨机制和 GPG 签名验证,使其成为生产环境部署 nginx 的可靠选择。
配置官方仓库后,你可以:
- 在 RHEL、Debian、Ubuntu、SLES、Alpine、Amazon Linux 上用统一思路接入官方仓库并安装 nginx。
- 通过校验指纹
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62确认软件包来源可信。 - 按需在稳定版与主线版之间切换,并以独立软件包方式加载动态模块。
建议先在测试环境按对应发行版章节走通仓库配置与签名验证流程,再推广到生产环境,并结合信任网络进一步核实 PGP 密钥。