关于这个似乎有很多StackOverflow的问题,但不幸的是,没有任何工作对我来说。
我在nginx上得到了一个502错误的网关,以及日志中的以下内容: connect() to ...myproject.sock failed (13: Permission denied) while connecting to upstream
我正在ubuntu
上运行wsgi
和nginx
,我一直在关注Digital Ocean的这个指南 。 我明显从uwsgi -s myproject.sock --http 0.0.0.0:8000 --module app --callable app
工作正确configurationwsgi
,但我不断得到nginx
权限被拒绝的错误,我不知道为什么:
在遇到这个问题和另一个 问题之后,我改变了.ini
文件,并添加了chown-socket
, chmod-socket
, uid
和gid
参数(也试过只是设置前两个,或者和一些不同的权限设置 – 即使是最宽容的没有工作)。
这一个看起来很有前途 ,但我不相信selinux
是安装在我的Ubuntu(运行sudo apt-get remove selinux
给出“包'selinux'没有安装,所以不能删除”,并find / -name "selinux"
不显示任何东西)。 以防万一,我尝试了这个post推荐的。 卸载apparmor
( sudo apt-get install apparmor
)也没有工作。
每当我做出改变,我运行sudo service nginx restart
,但我只看到502网关错误(和权限拒绝错误,当我读日志)。
这是我的nginx
configuration文件:
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
(如果有帮助,这些是我的数字海洋机器的规格: 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
)
请让我知道,如果有什么我可以做的,非常感谢。
我也跟着这个教程,遇到了同样的问题。 经过相当多的试验和错误之后,下面的步骤允许我成功地运行uWSGI和nginx:
我的nginx.config
文件:
server { listen 80; server_name localhost; location / { try_files @yourapplication; } location @yourapplication; { include uwsgi_params; uwsgi_pass unix:/PATH_TO_PROJECT/PROJECT.sock; } }
我的.ini
文件工作得不好,所以我决定利用uWSGI广泛的参数。 这是我用的:
uwsgi -s /PATH_TO_PROJECT/PROJECT.sock -w wsgi:app -H /PATH_TO_PROJECT/venv --http-processes=4 --chmod-socket=666 --master &
哪里:
-s /PATH_TO_PROJECT/PROJECT.sock
=我的.sock
文件的位置
-w wsgi:app
=我的wsgi.py
文件的位置, app
是我的Flask对象的名字
-H /PATH_TO_PROJECT/venv
=我的虚拟环境的位置
--http-processes=4
= uWSGI创建的http进程数
--chmod-socket=666
=在套接字上设置的权限
--master
=允许uWSGI与其主进程管理器一起运行
&
=在后台运行uWSGI
希望这可以帮助!
路径: unix:/PATH_TO_PROJECT/PROJECT.sock
应该放在/tmp
这个修正了我的问题。
遵循这个线程中的所有建议后,我仍然收到权限错误。 最后缺失的部分是纠正/etc/nginx/nginx.conf
文件中的nginx user
:
# old: user nginx; user www-data;