Получение ошибки 502 Bad Gateway и отправка электронного письма с помощью django, nginx, gunicorn

Я пытаюсь отправить электронное письмо, используя функцию django send_mail gmail SMTP на моем веб-сервере, и я получил ошибку 502 Bad Gateway.

Я использую nginx и gunicorn.

Вот мой error.log:

2014/04/12 16:46:55 [error] 26846#0: *11 upstream prematurely closed connection while                
reading response header from upstream, client: 179.162.163.62, server: example.com, 
request: "POST /contact/ HTTP/1.1", upstream: "http://127.0.0.1:9000/contact/", host: 
"example.com", referrer: "http://example.com/contact/"  

Ngnix-файл:

upstream example_gunicorn {
    server 127.0.0.1:9000 fail_timeout=0;
}

server {
    listen 80;
    client_max_body_size 4G;
    server_name .example.com;

    keepalive_timeout 5;

    location /static/ {
        alias /deploy/sites/example/static/; # STATIC_ROOT
        expires 30d;
    }

    location /media/ {
        alias /deploy/sites/example/media/; # MEDIA_ROOT
        expires 30d;
    }

    location / {
        # checks for static file, if not found proxy to app
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass   http://example_gunicorn;
    }
}

person Breno Teixeira    schedule 12.04.2014    source источник
comment
проверьте журнал ошибок джанго   -  person Mohammad AbuShady    schedule 13.04.2014


Ответы (3)


502 мало что говорит о том, что такое фактическая ошибка... Я нарисую вам картинку:

Client/Browser              Server                   Web Server               
    |         request         |                           |
    |------------------------>|                           |
    |                         |  attempt to send mail     |
    |                         |-------------------------> |
    |                         |                         ERROR 
    |                         |       error message       |          
    |                         |<--------------------------|
    |       502               |                           |
    |<----------------------- |                           |

Стрелки представляют общение. Время увеличивается по мере продвижения вниз по изображению.

Таким образом, веб-сервер скрывает фактическую ошибку от конечного пользователя, это довольно разумное поведение в производственной среде. Вам нужно заглянуть в логи веб-сервера.

person Sheena    schedule 24.10.2014

У меня была аналогичная проблема с использованием дроплета CentOS7 в DigitalOcean. Я использую Django 1.6.5 и пушку.

Я решил это, явно указав EMAIL_HOST = "74.125.22.108" вместо EMAIL_HOST = "smtp.gmail.com" в settings.py. В моем случае это была проблема с IPv6, поскольку DigitalOcean не разрешает SMTP через IPv6.

ПРИМЕЧАНИЕ. В целях безопасности всегда проверяйте IPv4-адрес smtp.gmail.com (используя dig или аналогичный), прежде чем слепо вставлять его в код.

person 5ELuqLbb85Hk    schedule 08.01.2015

Попробуйте отредактировать /etc/hosts

127.0.0.1 localhost.localdomain localhost example.com
127.0.0.1 localhost

Также может быть полезно увеличить proxy_read_timeout 60s; в конфигурации сервера. По умолчанию это 60 секунд, но вы можете сделать 360 секунд или что-то в этом роде. И не забудьте перезапустить службы (сеть, nginx, postfix и т. д.)

person Kirill    schedule 22.03.2015