nginx Unix域套接字错误


18

我使用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用户具有读/写权限。但是,导致该错误的原因,确实使我发疯,有人可以解决它。

Answers:


33

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

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

要解决此问题,请将套接字放置在其他目录中,例如/run(以前称为/var/run)。


1
/ run对于普通用户而言是不可写的
hostmaster 2014年

1
/run不能直接写,但是您可以指示systemd在该目录下创建一个目录,两个进程都可以写该目录
迈克尔·汉普顿

为了帮助那些搜索,这也适用于centos 7,并将套接字文件夹移动到/ run起作用。找到这个问题并不容易,因为每个帐户都可以在tmp中看到该文件夹​​和文件(将777设置为要测试),因此您永远都不会想到进程不能。
JosephK

0

是!这可以帮助!

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

catch-exceptions = true

到wsgi的ini文件。原来,我将日志文件处理程序的位置指定到了不存在的目录中,因此它一开始就无法记录错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.