在Debian 12和Ubuntu 24.04上从官方仓库安装Nginx

2 分钟阅读·Matthieu|

从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 OKServer: 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 -vcurl响应头中看到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 FullNginx HTTPNginx 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.

准备好亲自尝试了吗?

几秒内部署您自己的服务器。支持 Linux、Windows 或 FreeBSD。

查看 VPS 方案