为什么我在Nginx和Gunicorn的Django应用程序上获得502 Bad Gateway?

时间:2016-08-28 07:46:40

标签: django nginx centos gunicorn

我一直在尝试使用this tutorial部署演示应用。我在Virtualbox的CentOS 7上这样做。

但是,我得到了502 Bad Gateway。我该如何解决这个问题?

nginx.conf文件中的

server {}阻止

server {
        listen 80;
        server_name 172.16.16.215;

        location = /favicon.ico { access_log off; log_not_found off; }
        location /static/ {
            root /home/michel/myproject;
        }

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://unix:/home/michel/myproject/myproject.sock;
        }
    }

gunicorn.service文件

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

[Service]
User=michel
Group=nginx
WorkingDirectory=/home/michel/myproject
ExecStart=/home/michel/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/michel/myproject/myproject.sock myproject.wsgi:application

[Install]
WantedBy=multi-user.target

VAR /日志/ nginx的/ error.log中

2016/08/28 18:55:14 [crit] 17557#0: *4 connect() to unix:/home/michel/myproject/myproject.sock failed (13: Permission denied) while connecting to upstream, client: 172.16.16.23, server: 172.16.16.217, request: "GET / HTTP/1.1", upstream: "http://unix:/home/michel/myproject/myproject.sock:/", host: "172.16.16.217"

5 个答案:

答案 0 :(得分:1)

Gunicorn无权保存my_results文件,或者nginx无权阅读.sock文件。

将此文件移至.sock文件夹:

<强> nginx.conf

/tmp/

<强> gunicorn.service

proxy_pass http://unix:/tmp/myproject.sock:/;

答案 1 :(得分:1)

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

这是从this answer复制的。

答案 2 :(得分:0)

我也遇到了这个问题。为我解决了这个问题的原因是运行:

chmod 711 on the home directory

这允许nginx访问run文件夹中的.sock文件。此权限错误在Ubuntu上并未发生,但在从Cent OS派生的Amazon Linux 2上却存在。这些django deployment scripts可能会帮助其他面临此问题的人。

答案 3 :(得分:0)

有很多方法可以获取 502 badgateway ,请使用下面的cmds进行检查。.

  1. sudo systemctl status gunicorn
  2. sudo systemctl status nginx
  3. gunicorn --log-file=- projectname.wsgi:application

    以上结果应处于活动模式

答案 4 :(得分:-2)

我禁用了SELinux并且应用程序正常运行。

sudo vi /etc/sysconfig/selinux

设置SELINUX=disabled

保存并退出。 RESTART。