使用nginx和gunicorn运行django应用程序时缺少sock文件

时间:2017-02-18 18:09:33

标签: python django ubuntu nginx gunicorn

我关注this tutorial并成功手动运行项目。但是,在设置nginx和systemd之后,它会显示502 Bad Gateway

我看过其他类似的线程无济于事。

我看到我的枪炮工人正在做ps -ax | grep gunicorn

我的nginx配置:

server {
    listen 8000;
    server_name 127.0.0.1;

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

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;
    }
}

和systemd文件:

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

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

[Install]
WantedBy=multi-user.target

/var/log/nginx/error.log的内容:

2017/02/18 17:57:51 [crit] 1977#1977: *6 connect() to unix:/home/ubuntu/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: 10.0.2.2, server: 172.30.1.5, request: "GET / HTTP/1.1", upstream: "http://unix:/home/ubuntu/myproject/myproject.sock:/", host: "localhost:8000"

手动运行/home/ubuntu/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/myproject/myproject.sock myproject.wsgi:application也有效。也就是说,创建了sock文件。

我觉得我错过了很简单的事情。

我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

这里可能有一个订购的东西 - nginx可能在gunicorn之前启动,所以套接字还没有连接。您应该将gunicorn.service添加到nginx systemd文件中的After指令。