在Debian 12和Ubuntu 24.04上从官方仓库安装Nginx
从nginx.org官方仓库在Debian 12或Ubuntu 24.04上安装Nginx。涵盖签名密钥设置、apt固定、UFW和nftables防火墙规则、systemd管理以及每步验证。
在Debian 12和Ubuntu 24.04上从官方仓库安装Nginx
本教程从nginx.org官方仓库在Debian 12或Ubuntu 24.04 VPS上安装Nginx。你将获得最新版本(1.28.2 stable或1.29.6 mainline),而不是发行版自带的过时软件包。每个步骤都包含验证,让你清楚地知道发生了什么。
关于Nginx在服务器架构中的定位,请参阅Nginx Administration on a VPS。
前提条件
你需要:
- 一台运行Debian 12(Bookworm)或Ubuntu 24.04(Noble Numbat)的VPS
- 一个拥有
sudo权限的非root用户 - 服务器的SSH访问权限
本教程中的所有命令都以sudo用户身份运行,不是root。
应该安装Nginx stable还是mainline?
Nginx维护两个分支。Stable(偶数版本号,当前为1.28.x)只接收关键错误修复。Mainline(奇数版本号,当前为1.29.x)接收所有新功能、错误修复和安全补丁。Nginx团队推荐在生产环境中使用mainline。Stable适合希望在更新之间保持最小变动的用户。
| Stable | Mainline | |
|---|---|---|
| 当前版本 | 1.28.2 | 1.29.6 |
| 更新频率 | 仅关键修复 | 每4-6周 |
| 新功能 | 否 | 是 |
| nginx.org推荐 | 用于保守配置 | 用于生产环境 |
本教程默认使用stable。要安装mainline,请在标注处替换仓库URL。
为什么使用官方仓库而不是发行版软件包?
Debian 12和Ubuntu 24.04的默认apt仓库分别提供Nginx 1.22.1和1.24.0。这些版本落后官方发布数月甚至数年。nginx.org仓库提供由Nginx团队维护的最新stable或mainline构建版本。
| 来源 | Debian 12版本 | Ubuntu 24.04版本 | 维护方 |
|---|---|---|---|
| 发行版仓库 | 1.22.1 | 1.24.0 | 操作系统维护者 |
| nginx.org stable | 1.28.2 | 1.28.2 | Nginx团队 |
| nginx.org mainline | 1.29.6 | 1.29.6 | Nginx团队 |
如何在Debian 12上从官方仓库安装Nginx?
安装前提软件包,添加nginx.org签名密钥,配置apt源,固定仓库优先级,然后安装。整个过程大约需要两分钟。
步骤1:安装前提软件包
sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring
步骤2:导入nginx.org签名密钥
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
如果列出的指纹中没有匹配的,删除文件并重新下载。密钥不匹配意味着下载被截获或损坏。
步骤3:添加apt仓库
stable版本:
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
mainline版本,将packages替换为packages/mainline:
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
步骤4:固定官方仓库优先级
确保apt优先使用nginx.org的软件包而非发行版版本:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
不固定优先级的话,未来的apt upgrade可能会用旧的发行版版本替换官方软件包。
步骤5:安装Nginx
sudo apt update
sudo apt install -y nginx
步骤6:启动并验证安装
nginx -v
stable版本的预期输出:
nginx version: nginx/1.28.2
nginx.org软件包安装后不会自动启动。现在手动启动:
sudo systemctl start nginx
检查服务是否正在运行:
sudo systemctl status nginx
注意查看:在输出中寻找Active: active (running)。
验证Nginx是否在80端口监听:
ss -tlnp | grep :80
预期输出:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=...,fd=...))
测试欢迎页面:
curl -I http://localhost
注意查看:响应应包含HTTP/1.1 200 OK和Server: nginx/1.28.2。
如何在Ubuntu 24.04上从官方仓库安装Nginx?
过程与Debian几乎相同。唯一的区别是前提软件包和仓库URL。
步骤1:安装前提软件包
sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
注意:Ubuntu使用ubuntu-keyring而不是debian-archive-keyring。
步骤2:导入nginx.org签名密钥
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
验证指纹(与Debian相同的密钥):
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
在列出的密钥中寻找573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62。
步骤3:添加apt仓库
stable版本:
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
mainline版本:
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
步骤4:固定官方仓库优先级
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
步骤5:安装Nginx
sudo apt update
sudo apt install -y nginx
步骤6:启动并验证安装
启动Nginx(安装后不会自动启动):
sudo systemctl start nginx
执行与Debian相同的验证:
nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost
你应该在nginx -v和curl响应头中看到nginx/1.28.2(stable)或nginx/1.29.6(mainline)。
如何使用systemd管理Nginx?
Nginx附带systemd unit文件。以下是你日常会用到的命令。
| 命令 | 作用 |
|---|---|
sudo systemctl start nginx |
启动Nginx |
sudo systemctl stop nginx |
停止Nginx |
sudo systemctl restart nginx |
先停止再启动(断开连接) |
sudo systemctl reload nginx |
重新加载配置而不断开连接 |
sudo systemctl enable nginx |
设置开机自启 |
sudo systemctl disable nginx |
取消开机自启 |
sudo systemctl status nginx |
显示运行状态和最近日志 |
Reload与restart的区别: 配置变更后使用reload。它会应用新配置而不断开活跃连接。仅在修改了二进制级别的设置或升级Nginx时使用restart。Reload是安全的。Restart会断开所有活跃连接。
启用Nginx开机自启:
sudo systemctl enable nginx
重新加载前务必测试配置:
sudo nginx -t
预期输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果nginx -t报告错误,在重新加载前修复。reload失败会保持之前的配置继续运行。restart失败会导致Nginx停止。
如何为Nginx配置UFW防火墙规则?
UFW(Uncomplicated Firewall)是Ubuntu上默认的防火墙前端。它在Debian上可用但默认未安装。部分VPS镜像不附带UFW。如果找不到ufw,先安装它:
sudo apt install -y ufw
nginx.org软件包不包含UFW应用配置文件(Nginx Full、Nginx HTTP、Nginx HTTPS)。这些配置文件只随发行版软件包提供。请使用端口号。
先允许SSH(以免把自己锁在外面):
sudo ufw allow OpenSSH
允许HTTP(80)和HTTPS(443):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
如果只需要HTTPS:
sudo ufw allow 443/tcp
确保UFW已启用:
sudo ufw enable
验证规则:
sudo ufw status
预期输出包含:
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
如果ufw status显示Status: inactive,先运行sudo ufw enable。
如何为Nginx配置nftables防火墙规则?
Debian 12默认使用nftables作为防火墙后端。如果你直接管理防火墙规则(不使用UFW),将Nginx端口添加到nftables配置中。
编辑nftables配置:
sudo nano /etc/nftables.conf
在input链中(inet filter表内)添加以下规则:
tcp dport { 80, 443 } accept
一个最小可用配置如下:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
应用规则:
sudo nft -f /etc/nftables.conf
验证:
sudo nft list ruleset
注意查看:在输出中寻找tcp dport { 80, 443 } accept。如果没有,规则未被应用。
启用nftables开机自启:
sudo systemctl enable nftables
如何验证Nginx是否正常运行?
安装和防火墙配置完成后,逐项检查以下清单。
从服务器上:
nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost
从本地机器上(将YOUR_SERVER_IP替换为你的服务器IP):
curl -I http://YOUR_SERVER_IP
预期响应头:
HTTP/1.1 200 OK
Server: nginx/1.28.2
如果外部curl超时但localhost正常,说明防火墙阻止了80端口。返回上面的UFW或nftables部分。
你也可以在浏览器中打开http://YOUR_SERVER_IP。你应该看到"Welcome to nginx!"页面。
主要文件和目录位置
| 路径 | 用途 |
|---|---|
/etc/nginx/nginx.conf |
主配置文件 |
/etc/nginx/conf.d/ |
附加配置文件(默认加载) |
/var/log/nginx/access.log |
访问日志 |
/var/log/nginx/error.log |
错误日志 |
/usr/share/nginx/html/ |
默认文档根目录 |
nginx.org官方软件包使用/etc/nginx/conf.d/存放站点配置。这与发行版软件包不同,后者使用sites-available/和sites-enabled/。两种方式都可以。conf.d模式更简单。
要了解Nginx配置文件的组织方式,请参阅。要在此服务器上托管多个域名,请参阅。
Copyright 2026 Virtua.Cloud. All rights reserved.