502错误的网关-Django + Nginx + Gunicorn-袜子失败(13:权限被拒绝)

Dav*_*vid 5 django permissions nginx 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 [crit] 10850#0:* 23对unix的connect():/ home / root / myproject / myproject.sock 在连接到上游时失败(13:权限被拒绝),客户端:[ [my ip]],服务器:[[server ip]],请求:“ GET / HTTP / 1.1”,上游:“ http:// unix:/home/root/myproject/myproject.sock:/ ”,主机: “ [[服务器ip]]”

命令:

/home/root/myproject ls -l /home/root/classNote/classNote.sock
Run Code Online (Sandbox Code Playgroud)

输出:

srwxrwxrwx 1 root www-data 0 Dec 19 18:17 /home/root/myproject/myproject.sock
Run Code Online (Sandbox Code Playgroud)

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

命令:

ps ax | grep gunicorn
Run Code Online (Sandbox Code Playgroud)

输出:

  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
Run Code Online (Sandbox Code Playgroud)

小智 5

类似问题的链接

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

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

chmod o+rx /example_root_folder
Run Code Online (Sandbox Code Playgroud)


Yug*_*ari 3

似乎存在权限问题以 root 身份启动您的 nginx 服务,因为 root 有权访问您的 my project.sock

sudo service nginx stop
Run Code Online (Sandbox Code Playgroud)

然后

 sudo service nginx start
Run Code Online (Sandbox Code Playgroud)

但以 root 身份启动 nginx 并不是一个好主意。您可以尝试更改当前用户的权限

我可以向您推荐一个效果很好的替代方案。让 shell 脚本处理这一切。创建一个像这样的shell脚本(*表示注释中需要)

#!/bin/bash

NAME=""                              #Name of the application (*)
DJANGODIR=/path/to/django/project            # Django project directory (*)
SOCKFILE=/path/to/socket/file/myproject.sock        # we will communicate using this unix socket (*)
USER=                                      # the user to run as (*)
GROUP=                                     # the group to run as (*)
NUM_WORKERS=1                                     # how many worker   processes should Gunicorn spawn (*)
DJANGO_SETTINGS_MODULE=yourproject.settings             # which settings file should Django use (*)
DJANGO_WSGI_MODULE=yourproject.wsgi                     # WSGI module name (*)

echo "Starting $NAME as `whoami`"

# Activate the virtual environment
cd $DJANGODIR
source /path/to/virtualenv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /path/to/virtualenv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user $USER \
  --bind=unix:$SOCKFILE
Run Code Online (Sandbox Code Playgroud)