Django / nginx / uwsgi出现502错误

Posted

技术标签:

【中文标题】Django / nginx / uwsgi出现502错误【英文标题】:502 error with Django / nginx / uwsgi 【发布时间】:2016-02-16 01:32:36 【问题描述】:

我压力很大,因为我正试图让这个网站在我的 ubuntu 服务器上运行。我只是一个试图自己托管东西的前端。我想我几乎把它弄下来了。但访问域时仍然收到 502 bad gateway error。

这是我的项目树:

-- var
    -- www
        -- stacaravanverhuurgroesbeek
            |-- env/
            |-- logs/
                |-- access.log
                |-- error.log
                `-- uwsgi.log
            |-- conf/
            |   |-- stacaravanverhuurgroesbeek.sock
            |   `-- uwsgi.ini
            `-- public/
                |-- manage.py
                |-- media/
                |-- project.db
                |-- requirements.txt
                |-- static/
                `-- website/
                    |-- dev/
                    |-- gulp/
                    |-- gulpfile.js
                    |-- package.json
                    |-- settings.py
                    |-- static/
                    |-- templates/
                    |-- urls.py
                    `-- wsgi.py

我的 uwsgi ini 文件: /var/www/stacaravanverhuurgroesbeek/conf/uwsgi.ini:

[uwsgi]
# variables
projectname = stacaravanverhuurgroesbeek
projectdomain = stacaravanverhuurgroesbeek.nl 
base = /var/www/stacaravanverhuurgroesbeek

# config
chdir = %(base)/public
home = %(base)/env
wsgi-file = %(base)/public/website/wsgi.py

master = True
processes = 5

socket = %(base)/conf/%(projectname).sock
vacuum = true
die-on-term = true

logto = %(base)/logs/uwsgi.log

我的 nginx 配置: /etc/nginx/sites-available/stacaravanverhuurgroesbeek:

server 
    listen 80;
    server_name stacaravanverhuurgroesbeek.nl www.stacaravanverhuurgroesbeek.nl;

    root /var/www/stacaravanverhuurgroesbeek/;
    access_log /var/www/stacaravanverhuurgroesbeek/logs/access.log;
    error_log /var/www/stacaravanverhuurgroesbeek/logs/error.log;

    location /static/ 
        root /var/www/stacaravanverhuurgroesbeek/public/static/;
    

    location /media/ 
        root /var/www/stacaravanverhuurgroesbeek/public/media/;
    

    location / 
        include         uwsgi_params;
        uwsgi_pass      unix:///var/www/stacaravanverhuurgroesbeek/conf/stacaravanverhuurgroesbeek.sock;
    

我还将这个文件符号链接到sites-enabled

还有我的启动脚本: /etc/init/uwsgi.conf

# Emperor uWSGI script

description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [!2345]

setuid bastard
setgid bastard

exec uwsgi --master --emperor /etc/uwsgi/vassals

而且每次我更改某些内容时,我都会重新启动 nginx 和 uwsgi,但没有任何效果。

我真的希望有人能看到我的设置中的问题。

【问题讨论】:

您的 wsgi 配置是否与附庸相关联?皇帝怎么找到你的配置? @electrometro 是的,我将它符号链接到 vassals 目录.. 那个unix套接字路径名应该有三个斜杠吗?通常一个人会做。 @RichardSmith 我之前都试过了,在某处的帖子中看到了三个斜线。现在我也把它改回了一个斜线,但仍然没有效果:( .sock 文件是否已创建?如果是,请尝试删除它,然后重新启动 nginx。 【参考方案1】:

也许你应该在 Nginx 配置中设置上游,因为你要将所有请求代理到 uWSGI。例如:

upstream uwsgi_app 
    server unix:///path/to/your/mysite/mysite.sock; # взаимодействие  


server 
    ...
    location / 
        uwsgi_pass uwsgi_app;
        include uwsgi_params;
    
    ...

如果它不起作用,请同时提供 uWSGI 日志以确保请求确实到达 uWSGI 并且没有发生错误。

【讨论】:

以上是关于Django / nginx / uwsgi出现502错误的主要内容,如果未能解决你的问题,请参考以下文章

centos6.5+Django+mysql+nginx+uwsgi

mysql + Python3.5.2 + Django + Uwsgi + Nginx实现生产环境

Django+Nginx+Uwsgi 上线部署

nginx + uwsgi + django

nginx+uwsgi部署django

Django+Nginx+uWSGI部署