Gunicorn 没有创建套接字导致 nginx 抛出 502 错误

Gunicorn 没有创建套接字导致 nginx 抛出 502 错误

下列的本教程,我能够设置 Django、Gunicorn 和 nginx在虚拟环境中在 AWS EC2 实例(运行 Ubuntu 16.04)上,然后继续创建 Upstart 文件来“守护”整个过程。

激活虚拟环境后,我检查了:

  1. Django 的工作- 通过运行以下命令,我可以通过端口 8000 访问我的 Django 项目:

./manage.py runserver 0.0.0.0:8000

当我访问时,mydomain.com:8000我受到了默认的 Django 页面的欢迎。

  1. Gunicorn 可以运行,并且能够为 Django 应用提供服务- 我可以通过从我的项目文件夹运行以下命令来访问我的 Django 应用程序(替换projectname为我的实际项目名称):

gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application

这次访问时,mydomain.com:8000我再次看到了欢迎页面,在/adminURL 末尾附加内容后,我可以看到登录屏幕CSS(因为 Gunicorn 不知道静态 CSS 文件,根据教程,目前这是可以的)。

从这里我开始创建以下 systemd 文件(当masterfolder用于显示发生所有操作的文件夹时,myuser是我的系统用户(ubuntu,因为这是一个 Ubuntu 实例):

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/myuser/masterfolder
ExecStart=/home/myuser/masterfolder/myvirtualenv/bin/gunicorn --workers 3 --bind unix:/home/myuser/masterfolder/projectname.sock$

[Install]
WantedBy=multi-user.target`

我遇到了两个问题:

  1. 未创建套接字- 检查 nginx 日志文件时内外virtualenv(顺便说一下,不完全确定为什么它们相同)我看到了同样的错误:

2017/01/17 15:12:43 [crit] 12403#12403: *3 connect() to unix:/home/myuser/masterfolder/projectname.sock failed (2: No such file or directory) while connecting to upstream

现在,请注意与我运行时创建的masterfolder文件夹层次结构一致:django-adminstartproject

masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py

向内看masterfolder确实根本没有 .sock 文件,不要介意名为 的人projectname.sock

  1. 因此,尽管 nginx 可以正常工作,但它会抛出 502-

我的etc/nginx/sites-availabe/projectname文件如下所示:

server {
    listen 80;
    server_name www.mydomain.com mydomain.com MYIPADDRESS;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/masterfolder/projectname;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myuser/mastefolder/projectname.sock;
    }
}

当然,它的符号链接是正确的,并且在每次我尝试修复它之后我都会运行:

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx

我感觉我似乎错过了一些基本知识,没有理解所有这些基础设施是如何协同工作的。当然,欢迎指出我对这个过程的理解有误。

答案1

您是否检查过masterfolder目录的权限?

权限应该是myuser:www-data

另外,您的 nginx 配置文件中有一个拼写错误。希望那是一个打字错误:)

相关内容