无法以root身份运行uwsgi,“bind():Permission denied”

我尝试使用此文档configurationuWsgi,Django,Nginx: http ://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html

完成configurationuwsgi.ini文件,在/etc/uwsgi/vassals uwsgi.ini创build一个软链接。

最后一步失败: 在系统引导时启动uWSGI启动

运行此命令时:

sudo /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data

我得到这个错误:

 clock source: unix detected number of CPU cores: 1 current working directory: /etc/uwsgi/vassals detected binary path: /usr/local/bin/uwsgi !!! no internal routing support, rebuild with pcre support !!! your processes number limit is 3813 your memory page size is 4096 bytes detected max file descriptor number: 1024 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) bind(): Permission denied [core/socket.c line 227] Tue May 27 05:29:26 2014 - [emperor] curse the uwsgi instance uwsgi.ini (pid: 1391) Tue May 27 05:29:29 2014 - [emperor] removed uwsgi instance uwsgi.ini 

如果我没有sudo运行这个命令,一切都OK。

我已经将用户“kk”添加到组“www-data”,这里是uwsgi.ini

 [uwsgi] chdir = /home/kk/XXXXXXX module = wsgi home = /home/kk/XXXXXXX master = true processes = 10 socket = /home/kk/XXXXXXX/mysite.sock chmod-socket = 666 vacuum = true 

我想也许我犯了文件许可的错误。 有没有人有好主意?谢谢。


更新:

官方文档是正确的,我按照步骤在另一个新的VPS中部署项目,没有发生错误。

我有这个问题。 没有设置组和用户ID运行解决了问题。 当我有更多的时间来修复这个目录的文件权限时,我可能会重新访问这个文件,但是它现在可以正常工作

/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals

编辑我有时间重温这个答案,我不得不说,这是不是在生产中运行uwsgi的好做法。

本教程的问题在于,它假定www-data是一个用户, www-data用户和组可以访问它在服务器上需要的所有文件; 特别是套接字文件。 用你的用户和组替换适当的参数,你就可以很好地去(而不会在服务器上留下一个大的安全漏洞)。

所以,正确的命令(如果我是用户ovangleovangle会):

/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid ovangle --gid ovangle

创建一个具有成功运行服务器所需的特定权限的用户会更好,但是这对读者来说是一个练习。

我不知道为什么权限不起作用,但我遇到了同样的问题。

解决这个问题的一个快速方法是将套接字移到/ tmp! (这是一个相当合理的地方,以保持套接字…)

所以只需更新uwsgi配置:

 socket = /tmp/mysite.sock 

和nginx-config:

 upstream django { server unix:///tmp/mysite.sock; } 

它会开始工作!

如果你没有使用网络端口套接字(如演示的第一部分),而不是unix套接字..你可以改变这个..

 # uwsgi.ini socket = :8001 

和这个..

 # mysite_nginx.conf upstream django { # server unix:///home/teewuane/uwsgi-tutorial/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket (we'll use this first) } 

你会避免权限问题。

你问的问题的原因是,uwsgi试图创建一个unix套接字文件,通过在您配置的/ home / kk / XXXXXXX目录中的fastCGI协议与web服务器交互。您应该为您运行uwsgi的用户设置写入权限到目录/ home / kk / XXXXXXX /

进入完全相同的问题,解决了与用户和组有足够的权限的套接字文件运行后,我意识到这可能是一个错误。

如果你真的可以uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data在当前用户中运行它,但是一旦添加了sudo ,你会得到bind(): Permission denied error。

唯一的解释是当你运行它没有sudo ,以某种方式 – 使用--uid www-data --gid www-data部分工作,你实际上运行与当前用户有足够的permision; 并且一旦添加了sudo--uid www-data --gid www-data部分再次神奇地工作,这以www-data没有足够的permision绑定套接字文件结束。