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

Nginx+uWSGI部署Django时chown-socket遇Operation not permitted问题

解决Nginx与uWSGI的Socket权限问题

问题背景

Nginx报错:

connect() to unix:/var/www/html/view/dbproject/dbproject.sock failed (13: Permission denied) while connecting to upstream

尝试在uWSGI配置中添加chown-socket = %(username):www-data后,uWSGI日志出现chown(): Operation not permitted,核心原因是普通用户无权限将文件组修改为www-data系统组。

解决方案

方法1:将用户加入www-data组(推荐)

无需root启动uWSGI,通过组权限实现访问:

  • 执行命令将目标用户添加到www-data组:
    sudo usermod -aG www-data myusername
    
  • 注销当前用户重新登录,或执行newgrp www-data让组权限临时生效
  • 修改uwsgi.ini配置:
    • 移除chown-socket = %(username):www-data(或改为%(username):%(username))
    • 保留chmod-socket = 660,此时socket的组用户(www-data)拥有读写权限,Nginx可正常访问

方法2:以root启动uWSGI并降权运行worker进程

若必须设置socket所有者为myusername:www-data,可通过root启动master进程完成权限修改,再让worker进程以普通用户运行:

  • 在uwsgi.ini中添加以下配置:
    uid = myusername
    gid = www-data
    
  • 使用sudo启动uWSGI:
    sudo uwsgi --ini /var/www/html/view/dbproject/uwsgi.ini
    
    此时master进程以root运行,可修改socket所有者,worker进程自动降权为myusername:www-data,兼顾权限需求与运行安全。

方法3:调整Socket存放目录

将socket放到Nginx与uWSGI都有权限的系统目录:

  • 创建目录并设置权限:
    sudo mkdir -p /run/uwsgi/
    sudo chown myusername:www-data /run/uwsgi/
    sudo chmod 750 /run/uwsgi/
    
  • 修改uwsgi.ini中的socket路径:
    socket = /run/uwsgi/dbproject.sock
    
  • 移除chown-socket配置,保留chmod-socket = 660,socket会继承目录的权限属性,Nginx可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:35:20