报错日志中包含了问题的根本原因,最关键的一行是:
nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
为什么会报错?
这行错误说明 Nginx 尝试在 IPv6 地址(即 [::]:80)上监听 80 端口,但是你的服务器系统目前不支持或禁用了 IPv6。
在 Debian 12 的 Nginx 默认配置中,它会同时尝试监听 IPv4 和 IPv6 端口。当 IPv6 不可用时,Nginx 启动前置测试(-t)就会失败,从而导致整个服务无法启动,并引发 apt 安装过程报错。
解决步骤
我们需要修改 Nginx 的默认配置文件,让它只监听 IPv4 即可。
步骤 1:编辑默认站点配置文件 运行以下命令,使用 nano 文本编辑器打开 Nginx 的默认配置:
Bash
sudo nano /etc/nginx/sites-enabled/default
步骤 2:注释掉 IPv6 监听配置 在文件中往下找(通常在前面几行),你会看到类似这样的两行代码:
Nginx
listen 80 default_server;
listen [::]:80 default_server;
将包含 [::]:80 的那一行前面加上一个 # 号,将其注释掉,修改后应该是这样的:
Nginx
listen 80 default_server;
# listen [::]:80 default_server;
保存并退出编辑器: 如果你用的是 nano,按
Ctrl + O保存,然后按Enter确认文件名,最后按Ctrl + X退出。
步骤 3:测试 Nginx 配置 修改完成后,让 Nginx 自己检查一下配置文件语法是否正确:
Bash
sudo nginx -t
如果输出显示 syntax is ok 和 test is successful,说明修改没问题。
步骤 4:修复包管理器并启动服务 因为刚才的安装过程被打断了(产生了 dpkg 错误),我们需要让系统完成剩下的配置工作:
Bash
sudo dpkg --configure -a
这个命令会自动处理刚刚失败的 Nginx 启动流程。执行完毕后,你可以再次检查 Nginx 的状态:
Bash
sudo systemctl status nginx
这次你应该能看到绿色的 active (running) 了!