nginx unix 域套接字错误

nginx unix 域套接字错误

我使用 fedora 17,当我使用 unix 域套接字通过 uwsgi 设置 nginx 时,当我将套接字放在具有适当权限的目录中时,一切正常,但是当我将套接字放在中时,/tmp会导致 nginx 错误:

connect() to unix:/tmp/MySite.sock failed (2: No such file or directory) while connecting to upstream

该文件确实存在,并且 nginx 用户具有读/写权限。但是什么原因导致此错误,这真的让我抓狂,有人能找出原因吗。

答案1

您不能将用于进程间通信的套接字放置在 中/tmp

出于安全原因,Fedora 的最新版本使用命名空间临时目录,这意味着每个服务看到的都是完全不同的/tmp,并且只能看到该目录中自己的文件。

要解决该问题,请将套接字放在不同的目录中,例如/run(以前称为/var/run)。

答案2

是啊!这很有帮助!

看到来自 uwsgi 的 check-startup-logs 消息,但启动日志中没有数据,无法找出发生了什么。结果,我需要将 sock 文件更改为非 /tmp 位置,并添加:

捕获异常 = true

到 wsgi 的 ini 文件。结果,我将日志文件处理程序位置指定到一个不存在的目录,因此它首先无法记录错误。

答案3

基本上,问题出现在一个设置袜子的过程中/tmp路径,但它不会对另一个进程可见。

服务配置中有一个设置,它会阻止由不同进程创建的文件,即使使用同一个用户。

找到您的服务配置文件(例如:/etc/systemd/system/myapp.service),然后添加此设置:PrivateTmp=否为你们提供两种服务。

[Service]
...
PrivateTmp=No

有关 systemd 单元的更多信息,请参见此处:

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

相关内容