Nginx 是一个快速、轻量级的 Web 服务器,用于提供静态内容、终止 TLS 并将请求代理到其后方的应用服务器。Debian 13 Trixie 在其主 apt 仓库中提供了 Nginx,这使得在新鲜安装的系统中安装只需一条命令。
本指南将解释如何在 Debian 13 上安装 Nginx、打开防火墙、使用 systemd 管理服务,并为您的第一个站点创建基本的服务器块。
先决条件
您需要一台带有 sudo 用户的 Debian 13 服务器。UFW 应已安装并处于活动状态,以便默认情况下进行防火墙保护。
快速参考
如需打印的快速参考,请参阅 Nginx 速查表。
| 任务 | 命令 |
|---|---|
| 安装 Nginx | sudo apt install nginx |
| 在 UFW 中允许 HTTP 和 HTTPS | sudo ufw allow 'Nginx Full' |
| 启动服务 | sudo systemctl start nginx |
| 开机启用 | sudo systemctl enable nginx |
| 配置更改后重新加载 | sudo systemctl reload nginx |
| 测试配置 | sudo nginx -t |
| 显示服务状态 | systemctl status nginx |
| 站点配置目录 | /etc/nginx/sites-available/ |
| 已启用站点的符号链接 | /etc/nginx/sites-enabled/ |
| 默认文档根目录 | /var/www/html/ |
步骤 1:更新软件包索引
在安装前刷新 apt,使其看到最新的软件包元数据:
终端
sudo apt update输出列出了已检查的仓库。干净的运行不会出错。
步骤 2:安装 Nginx
安装 nginx 软件包:
终端
sudo apt install nginx默认安装会拉取 nginx-common 软件包、systemd 单元和标准模块集。apt 还会创建 www-data 用户,该用户拥有文档根目录并运行工作进程。
确认版本:
终端
nginx -v输出
nginx version: nginx/1.26.3确切版本可能不同,因为 Debian 发布点更新,但 1.26.x 是随 Debian 13 Trixie 一起发布的版本。
步骤 3:在 UFW 中允许 HTTP 和 HTTPS
Nginx 软件包会向 UFW 注册应用程序配置文件。在一个规则中同时允许 HTTP 和 HTTPS:
终端
sudo ufw allow 'Nginx Full'验证规则是否已生效:
终端
sudo ufw status输出
Status: active
To Action From
-- ------ ----
Nginx Full ALLOW Anywhere
OpenSSH ALLOW Anywhere如果您目前只需要 HTTP,请将规则替换为 Nginx HTTP。稍后添加 TLS 时再切换到 Nginx Full。
步骤 4:使用 systemd 管理 Nginx 服务
Nginx 软件包在安装时启动服务并启用其开机自启。确认两者:
终端
systemctl is-active nginx
systemctl is-enabled nginx输出
active
enabled如果服务未运行,请启动它:
终端
sudo systemctl start nginx最常见的服务操作是重启、重新加载和状态:
终端
sudo systemctl restart nginx
sudo systemctl reload nginx
systemctl status nginxreload 会重新读取配置而不会断开连接,这是在编辑服务器块后的正确命令。restart 会停止并启动服务,仅在二进制文件本身更改时需要。
步骤 5:验证默认页面
打开浏览器并访问服务器的 IP,或使用 curl:
终端
curl -I http://localhost输出
HTTP/1.1 200 OK
Server: nginx/1.26.3
Content-Type: text/html200 OK 响应确认 Nginx 正在提供默认页面。默认文档根目录是 /var/www/html/,其中包含一个 index.nginx-debian.html 欢迎页面。
步骤 6:创建您的第一个服务器块
服务器块是 Nginx 从单个主机提供多个站点的方式。为新站点创建文档根目录:
终端
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo '<h1>Hello from example.com</h1>' | sudo tee /var/www/example.com/html/index.html创建服务器块文件:
终端
sudo nano /etc/nginx/sites-available/example.com粘贴以下配置并调整域名:
/etc/nginx/sites-available/example.comnginx
server {listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html;
location / {try_files $uri $uri/ =404;}}通过在 sites-enabled 中创建符号链接来启用站点:
终端
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/在重新加载之前测试配置:
终端
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 以使新的服务器块生效:
终端
sudo systemctl reload nginx访问域名以验证站点是否加载。如果域名尚未指向服务器,请在工作站上编辑 /etc/hosts 或使用 curl --resolve example.com:80:SERVER_IP http://example.com/ 进行测试。
重要的 Nginx 文件和目录
默认的 Debian 布局将配置分散在几个位置:
/etc/nginx/nginx.conf是主配置文件。/etc/nginx/sites-available/存放服务器块模板。/etc/nginx/sites-enabled/存放指向活动服务器块的符号链接。/etc/nginx/snippets/用于共享配置片段,如 TLS 加固。/var/log/nginx/access.log和/var/log/nginx/error.log是日志文件。/var/www/html/是默认文档根目录。
故障排除
默认页面无法加载
使用 systemctl status nginx 检查服务是否运行。如果未运行,运行 sudo nginx -t 以查找配置错误。UFW 也可能阻止端口 80;请使用 sudo ufw status 确认。
bind() to 0.0.0.0:80 failed (98: Address already in use)
另一个 Web 服务器已绑定到端口 80。Debian 上通常是 Apache 造成的。使用 sudo systemctl stop apache2 停止它,并使用 sudo systemctl disable apache2 禁用其开机自启。
服务器块返回 404sites-enabled 中的符号链接缺失或指向错误的文件。使用 ls -l /etc/nginx/sites-enabled/ 列出它。重新创建符号链接并重新加载 Nginx。
nginx -t 报告重复的 default_server
两个服务器块设置了 listen 80 default_server。只能有一个是默认的。从新服务器块中移除该关键字并重新加载。