首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置Django + nginx + uwsgi + supervisord: /run和/tmp中套接字的区别

设置Django + nginx + uwsgi + supervisord: /run和/tmp中套接字的区别
EN

Server Fault用户
提问于 2016-12-07 14:41:15
回答 1查看 1K关注 0票数 1

我试图在同一台机器上设置2个Django网络应用程序,使用uWSGI皇帝和nginx,并监督管理启动和重新启动皇帝进程。我终于在互联网上进行了大量的搜索,终于得到了一个有效的部署。然而,在所有的拉头发过程中,我发现了一些奇怪的东西,如果有人能向我解释为什么会发生这种事,我会很感激的。

因此,我在皇帝模式下作为根运行我的uWSGI进程。vassal配置文件负责将特权丢弃到我的uid,并创建一个由我的用户拥有的套接字文件,其组为www-data (以便nginx可以向其写入)和权限660。下面是一个示例附属物配置:

代码语言:javascript
复制
[uwsgi]
uid = xxxx

chdir = %(project_dir)/%(project)
home = %(venv_base)/%(venv)
module = %(project).wsgi:application

master = true
processes = 4

socket = /tmp/%(project).sock
chown-socket = %(uid):www-data
chmod-socket = 660
stats = /tmp/%(project)_stat.sock
logto = %(project_dir)/logs/uwsgi.log
# Cleans up when the process is killed (includes deleting the socket file)
vacuum = true

这很好,但是如果我尝试在/run中而不是/tmp中创建套接字,我就开始获得socket bind()调用的权限被拒绝的错误。套接字是用适当的所有权和权限创建的,但是附属者无法在其上调用bind()或unlink()。这一切为什么要发生?/tmp和/run有什么区别,我什么时候应该使用它们?任何帮助或指示都将不胜感激。

编辑:我刚刚尝试将套接字的权限设置为777,而uwsgi仍然给我一个拒绝权限的错误:(

EN

回答 1

Server Fault用户

回答已采纳

发布于 2016-12-07 17:53:42

我在服务器故障上没有足够的声誉来发表评论,所以我必须给出一个“答案”:

bind()调用将套接字绑定到文件系统中的一个节点,因此您的用户可能在/run中没有写权限!?在我的系统中,/tmp有og+w,而/run有og-w。尝试在具有写权限的/run子文件夹中创建套接字。

您所说的“套接字创建得很好”是什么意思?你能用另一个进程连接到它吗?听起来好像插座在那儿。但是根据我上面写的,我不希望它出现在文件系统中。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/819284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档