You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Flask应用返回Bad Gateway:NGINX Unix Socket权限拒绝问题

问题排查:NGINX连接Unix Socket权限拒绝(Bad Gateway)

以下是针对你遇到的connect() to unix:... failed (13: Permission denied)错误的排查方向和解决方法:

1. 父目录权限不足

Unix Socket的访问依赖于父目录的执行权限(允许进程进入目录定位到Socket文件),即使Socket本身设了777权限,父目录权限不够也会导致拒绝访问。

检查命令:

ls -ld /home/ubuntu/ip-whitelister/

查看输出的权限列(如drwxr-xr-x),确保最后三位(其他用户权限)包含x(执行权限)。

解决方法:

  • 快速修复:给父目录添加其他用户执行权限
    chmod o+x /home/ubuntu/ip-whitelister/
    
  • 更安全的方式:将NGINX运行用户(通常是www-data)加入目录所属用户组
    # 查看目录所属组
    ls -ld /home/ubuntu/ip-whitelister/ | awk '{print $4}'
    # 假设组为ubuntu,添加用户到组
    usermod -aG ubuntu www-data
    # 重启NGINX生效
    systemctl restart nginx
    

2. AppArmor限制(Ubuntu默认启用)

Ubuntu的AppArmor可能会限制NGINX访问/home目录下的文件,即使权限设置正确。

检查命令:

aa-status

若nginx处于enforce模式,说明存在限制。

解决方法:

编辑NGINX的AppArmor规则文件:

nano /etc/apparmor.d/usr.sbin.nginx

添加一行规则允许访问Socket文件:

/home/ubuntu/ip-whitelister/ip-whitelister.sock rw,

保存后重新加载规则:

systemctl reload apparmor

3. Socket所属用户/组不匹配

虽然777权限允许所有用户访问,但部分场景下Flask应用生成Socket时的用户/组可能导致NGINX访问异常。

检查命令:

ls -l /home/ubuntu/ip-whitelister/ip-whitelister.sock

解决方法:

修改Socket所属为NGINX用户:

chown www-data:www-data /home/ubuntu/ip-whitelister/ip-whitelister.sock

同时修改Flask应用的启动配置(如Gunicorn的--user/--group参数),让它生成Socket时直接使用www-data用户,避免后续重启应用后权限失效。

4. SELinux限制(部分发行版适用)

如果你的系统开启了SELinux(如CentOS/RHEL),会强制限制进程访问权限。

检查命令:

sestatus

若SELinux status: enabled,则需要调整上下文。

解决方法:

# 配置SELinux上下文允许NGINX访问该Socket
semanage fcontext -a -t httpd_unix_stream_socket_t /home/ubuntu/ip-whitelister/ip-whitelister.sock
restorecon -v /home/ubuntu/ip-whitelister/ip-whitelister.sock

内容的提问来源于stack exchange,提问作者Rav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:53:29