使用django、nginx、gunicorn发送邮件时出现502坏网关错误

1 人关注

我试图使用django send_mail函数gmail SMTP在我的Web服务器上发送一封电子邮件,但我得到了502 Bad Gateway错误。

我在使用nginx和gunicorn。

Here is my 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 file:

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;
    
1 个评论
检查django错误日志
python
django
nginx
gunicorn
supervisord
Breno Teixeira
Breno Teixeira
发布于 2014-04-13
3 个回答
Sheena
Sheena
发布于 2015-03-22
已采纳
0 人赞同

502没有说太多实际的错误是什么......我给你画个图吧。

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

箭头代表沟通。时间随着你在图像上的下移而增加。

因此,网络服务器向最终用户隐藏了实际的错误,这在生产环境中是非常敏感的行为。你需要查看网络服务器的日志。

5ELuqLbb85Hk
5ELuqLbb85Hk
发布于 2015-03-22
0 人赞同

我在DigitalOcean上使用CentOS7的droplet也遇到了类似的问题。我正在使用Django 1.6.5和gunicorn。

我通过在 settings.py 中明确指定 EMAIL_HOST = "74.125.22.108" 而不是 EMAIL_HOST = "smtp.gmail.com" 解决了这个问题。在我的案例中,这是一个IPv6问题,因为DigitalOcean 不允许 SMTP over IPv6.

注意:为了安全起见,在盲目地将smtp.gmail.com的IPv4地址粘贴到代码中之前,一定要验证该地址(使用 dig 或类似工具)。

Kirill
Kirill
发布于 2015-03-22
0 人赞同

Try to edit your /etc/hosts

127.0.0.1 localhost.localdomain localhost example.com