Nginx 权限被拒绝修复指南 | AI生成和翻译

Home 2026.02

Question: Nginx 启动失败并出现以下新错误:could not open error log file (Permission denied),”user” directive ignored,以及 bind() to 0.0.0.0:80 failed (Permission denied)。我该如何修复?

Answer:

这些错误表明 Nginx 在启动时不是以 root 身份运行的。Master process 必须以 root 身份(或具有足够权限)启动,以便执行以下操作:

目前你的 Nginx 正以普通用户(很可能是 lzw)身份启动,这导致了 bind() 和日志文件访问错误。

根本原因总结

你之前设置了 Nginx 以用户 lzw 运行(通过 systemctl edituser 指令),但是:

→ Nginx 在启动过程中立即失败。

正确且推荐的修复方法(撤销非 root 用户设置)

  1. 移除设置 User=lzw 的 override 配置

    sudo rm -f /etc/systemd/system/nginx.service.d/override.conf
    sudo systemctl daemon-reload
    

    这将移除你添加的任何自定义 User=Group= 设置。

  2. (可选但推荐)确保 nginx.conf 中不存在 user

    打开配置文件:

    sudo nano /etc/nginx/nginx.conf
    

    查找并注释掉或删除如下任意行:

    user lzw lzw;
    # 或
    user lzw;
    

    保存文件。

  3. 测试配置并重启 Nginx

    sudo nginx -t
    sudo systemctl restart nginx
    sudo systemctl status nginx
    

    你现在应该看到:

    • Active: active (running)
    • 没有关于 port 80 或日志的 permission denied 错误
    • Worker processes 以 www-data(或默认组)身份运行
  4. 修复原始文件夹访问权限(解决 /movies/ 报 403 的问题)

    # 授予 nginx 组访问你的下载文件夹的权限
    sudo chgrp -R www-data /home/lzw/qDownloads
    sudo chmod -R g+rx /home/lzw/qDownloads
       
    # 允许 nginx 进入你的 home 目录
    sudo chmod g+x /home/lzw
    

    重载 Nginx:

    sudo systemctl reload nginx
    

    然后在浏览器中打开 http://192.168.1.36/movies/ —— 它应该能显示目录列表。

如果你确实想让 Nginx 完全以 lzw 身份运行(不推荐)

你必须避开特权操作:

立即恢复的一键操作命令序列

sudo rm -f /etc/systemd/system/nginx.service.d/override.conf
sudo systemctl daemon-reload
sudo sed -i '/^user\s\+lzw/d' /etc/nginx/nginx.conf   # 如果存在 user 行则删除
sudo nginx -t && sudo systemctl restart nginx
sudo systemctl status nginx

完成这些后,Nginx 应该会重新正常启动。然后针对你的 /movies/ 路径应用组权限修复即可。

References:


Back Donate