502 Bad Gateway - django + nginx + gunicorn - 袜子失败(13:许可被拒绝)

时间:2015-12-19 23:52:26

标签: django nginx permissions gunicorn

我正在关注本教程:https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-14-04

我相信我的设置中的其他所有内容都是正确的。文件/var/log/nginx/error.log有许多以下错误:

2015/12/19 18:41:58 [暴击] 10850#0:* 23 connect()到unix:/home/root/myproject/myproject.sock失败(13:权限被拒绝)连接上游时,客户端:[[my ip]],服务器:[[server ip]],请求:" GET / HTTP / 1.1",上游:" {{3 }",主持人:" [[服务器ip]]"

命令:

/home/root/myproject ls -l /home/root/classNote/classNote.sock

输出:

srwxrwxrwx 1 root www-data 0 Dec 19 18:17 /home/root/myproject/myproject.sock

编辑:安德烈的评论回复:

命令:

ps ax | grep gunicorn

输出:

  847 ?        Ss     0:00 /home/root/myproject/myprojectEnv/bin/python myprojectEnv/bin/gunicorn --workers 3 --bind unix:/home/root/myproject/myproject.sock myproject.wsgi:application
  921 ?        S      0:00 /home/root/myproject/myprojectEnv/bin/python myprojectEnv/bin/gunicorn --workers 3 --bind unix:/home/root/myproject/myproject.sock myproject.wsgi:application
  923 ?        S      0:00 /home/root/myproject/myprojectEnv/bin/python myprojectEnv/bin/gunicorn --workers 3 --bind unix:/home/root/myproject/myproject.sock myproject.wsgi:application
  928 ?        S      0:00 /home/root/myproject/myprojectEnv/bin/python myprojectEnv/bin/gunicorn --workers 3 --bind unix:/home/root/myproject/myproject.sock myproject.wsgi:application
 1136 pts/0    S+     0:00 grep gunicorn

2 个答案:

答案 0 :(得分:0)

link to similar question

我刚刚遇到了这个问题。我能够创建 gunicorn 套接字文件,但 nginx 抱怨权限被拒绝。问题是我的套接字文件位于子文件夹中,而根文件夹没有读取或执行权限。所以即使子文件夹有正确的权限,根文件夹也阻止了 nginx 进入子文件夹。

解决方案是在根文件夹中添加读取和执行权限:

chmod o+rx /example_root_folder

答案 1 :(得分:-2)

我之前遇到了一个非常类似的问题(也是根据digitalocean.com上提到的教程进行的),我的意思是套接字不起作用,而且我收到了502错误。

我的解决方案是从套接字绑定转移到绑定普通IP地址。

在virtualenv(在“manage.py”旁边)里面我有一个gunicorn.py文件:(注意:我使用3.4版本)

#!/usr/bin/python3.4

"""
Run Gunicorn (Django) on a specific IP addr
"""

import os

# Change directory to the virtualenv folder
os.chdir("/home/your_path/name_of_env/")

# Run Gunicorn
os.system("bin/gunicorn -w 3 -b 127.0.0.1:8000 your_project.wsgi:application &")

脚本运行Gunicorn而不激活virtualenv(命令“bin / gunicorn”)和后台(“&”)。

注意:如果您不使用virtualenv而不是从上面的脚本中删除“bin /”。

要在启动PC并登录后调用该脚本,请将此行添加到最后的“.profile”文件中。 (它在您的主目录中)

python3.4 path/to/the/file/gunicorn.py

在nginx文件中,你应该有这部分代码:

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
}

请记住,IP地址127.0.0.1:8000是保留的。因此,如果您想运行Django开发服务器,您有两个选择:

  1. 通过命令“ps aux | grep gunicorn”和“kill -9 [PID]”关闭Gunicorn,然后正常运行命令“python3.4 manage.py runserver”
  2. 或者在不同的IP和端口上运行Django开发服务器,例如“python3.4 manage.py runserver 0.0.0.0:8001”
  3. 此解决方案适合我。