【问题标题】:bad gateway on django+gunicorn+nginx configurationdjango+gunicorn+nginx 配置上的网关错误
【发布时间】:2013-08-03 21:58:36
【问题描述】:

当我尝试访问我的网站时,我只看到 502 错误。 这是我的 nginx 配置:

upstream pzw_server {
#   server unix:/home/pzw/pzw/run/gunicorn.sock fail_timeout=0;
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    listen 80;
    server_name my_server_ip_addr;

    client_max_body_size 4G;

    access_log /home/pzw/pzw/log/nginx-access.log;
    error_log /home/pzw/pzw/log/nginx-error.log;

    location /static/ {
        alias /home/pzw/pzw/static/;
    }

    location /media/ {
            alias /home/pzw/pzw/media/;
    }

    location / {
            try_files $uri @proxy;
    }

    location @proxy {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://my_server_ip_addr;
    }
}

我正在使用的 Gunicorn 启动脚本:

#!/bin/bash

NAME='app_name'
DJANGODIR=/home/pzw/pzw
SOCKFILE=/home/pzw/pzw/run/gunicorn.sock
USER=pzw
GROUP=pzw
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=app_name.settings
VIRTENVDIR=/home/pzw/.virtualenvs/pzw


echo "STARTING $NAME"

cd $DJANGODIR
source "${VIRTENVDIR}/bin/activate"
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

exec "${VIRTENVDIR}/bin/gunicorn_django" \
    --name $NAME \
    --workers $NUM_WORKERS \
    --user=$USER --group=$GROUP \
    --debug \
    --log-level debug #\
#   --bind=unix:$SOCKFILE

Nginx 记录以下错误:

2013/08/03 23:26:04 [error] 8582#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: my_ip, server: my_server_ip, request: "GET / HTTP/1.1", upstream: "http://my_server_ip:80/", host: "my_server_ip"

当我尝试使用 lynx 连接到我的服务器上的 127.0.0.1:8000 时,一切似乎都很好。最初我尝试使用 unix 套接字,但由于它不起作用(同样的错误),我切换到 TCP。 Gunicorn 没有记录与 nginx 的连接。

【问题讨论】:

    标签: django nginx gunicorn


    【解决方案1】:

    您的 nginx 服务器配置中的 proxy_pass 指令应该反映您配置的上游服务器。

    proxy_pass http://pzw_server;
    

    http://wiki.nginx.org/HttpUpstreamModule

    【讨论】:

      【解决方案2】:

      x轴,

      每当您将 TEMPLATE_DEBUG 设置为 False 时,您还需要设置 ALLOWED_HOSTS 以便 Django 知道要处理哪些主机/域的请求。显然,当 ALLOWED_HOSTS 只是空列表时,本地主机隐式工作。

      我希望这会有所帮助!

      【讨论】:

      • 通过在应用程序 settings.py 中添加 ALLOWED_HOSTS = ['127.0.0.1'] 保存我的一天。谢谢
      猜你喜欢
      • 2012-05-28
      • 2018-12-05
      • 2017-07-07
      • 2015-04-22
      • 2021-11-19
      • 2020-12-10
      • 2016-06-23
      • 2014-12-07
      • 1970-01-01
      相关资源
      最近更新 更多