【发布时间】:2015-07-04 12:21:35
【问题描述】:
在 StackOverflow 上似乎有很多关于此的问题,但不幸的是,对我没有任何帮助。
我在 nginx 上收到 502 错误网关,日志中显示以下内容:connect() to ...myproject.sock failed (13: Permission denied) while connecting to upstream
我在ubuntu 上运行wsgi 和nginx,我一直在关注this guide from Digital Ocean。我显然正确配置了wsgi,因为uwsgi -s myproject.sock --http 0.0.0.0:8000 --module app --callable app 工作,但我不断收到nginx 权限被拒绝错误,我不知道为什么:
遇到this question和this other one后,我更改了.ini文件并添加了chown-socket、chmod-socket、uid和gid参数(也尝试设置前两个,或者或者,还有几个不同的权限设置——即使是最宽松的也不起作用)。
This one seemed promising,但我不相信 selinux 已安装在我的 Ubuntu 上(运行 sudo apt-get remove selinux 会给出“未安装包‘selinux’,因此未删除”和 find / -name "selinux" 不显示任何内容) .不过,以防万一,我也尝试了this post 推荐的方法。卸载 apparmor (sudo apt-get install apparmor) 也不起作用。
每次进行更改时,我都会运行 sudo service nginx restart,但我只看到 502 网关错误(以及读取日志时的权限被拒绝错误)。
这是我的nginx 配置文件:
server {
listen 80;
server_name 104.131.110.156;
location / {
include uwsgi_params;
uwsgi_pass unix:/home/user/myproject/web_server/myproject.sock;
}
}
.conf文件:
description "uWSGI server instance configured to serve myproject"
start on runlevel [2345]
stop on runlevel [!2345]
setuid user
setgid www-data
env PATH=/root/.virtualenvs/my-env/bin
chdir /home/user/myproject/web_server
exec uwsgi --ini /home/user/myproject/web_server/myproject.ini
.ini文件:
[uwsgi]
module = wsgi
master = true
processes = 5
socket = /home/user/myproject/web_server/myproject.sock
chown-socket=www-data:www-data
chmod-socket = 664
uid = www-data
gid = www-data
vacuum = true
die-on-term = true
(如果有帮助,这些是我的 Digital Ocean 机器的规格:Linux 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)
如果有什么我能做的,请告诉我,非常感谢。
【问题讨论】:
-
尝试将套接字放在 /tmp 中。如果 nginx 用户无权列出套接字路径中的任何目录,您可能会被拒绝访问。它需要 /home/user、/home/user/myproject 等权限
-
感谢您的回答!不幸的是,同样的错误:
connect() to unix:/tmp/coaster.sock failed (13: Permission denied) while connecting to upstream -
相当肯定 nginx 在 Ubuntu 上作为 www-data 运行,但值得一试... /etc/nginx.conf 说 nginx 以什么方式运行?另外,如果您将 php-fpm 更改为使用 tcp 套接字(如 127.0.0.1:9000)会发生什么?
-
是的,我认为它以
www-data运行。我认为可能是权限有问题,所以我通过调用sudo chown www-data:www-data DIRNAME将user/下目录的所有者更改为www-data用户,但是即使重新启动服务器和nginx,我仍然得到相同的结果错误。我还以 root 身份运行nginx,因为我在使用 root 帐户时调用了sudo service nginx restart。而且我用的不是PHP,而是Flask + WSGI,所以不知道是否适用…… -
尝试使用 TCP 而不是 unix 套接字,在您的情况下,它是
--socket 127.0.0.1:3031参数和uwsgi_pass 127.0.0.1:3031;在 nginx 配置中。 It's working better anyway.
标签: sockets ubuntu nginx wsgi uwsgi