我正在尝试使用我的网络服务器上的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;
}
}
谢谢你们。
答案 0 :(得分:3)
502并没有说明实际错误是什么......我会给你画一幅画:
Client/Browser Server Web Server
| request | |
|------------------------>| |
| | attempt to send mail |
| |-------------------------> |
| | ERROR
| | error message |
| |<--------------------------|
| 502 | |
|<----------------------- | |
箭头代表沟通。向下移动图像时,时间会增加。
因此,网络服务器隐藏了最终用户的实际错误,这在生产环境中是非常明显的行为。您需要查看Web服务器日志。
答案 1 :(得分:2)
我在DigitalOcean上使用CentOS7 Droplet时遇到了类似的问题。我正在使用Django 1.6.5和gunicorn。
我通过在EMAIL_HOST = "74.125.22.108"
中明确指定EMAIL_HOST = "smtp.gmail.com"
而非settings.py
来解决此问题。就我而言,这是一个IPv6问题,如DigitalOcean does not allow SMTP over IPv6。
注意:出于安全考虑,请务必在盲目地将其粘贴到代码中之前验证smtp.gmail.com的IPv4地址(使用dig
或类似内容)。
答案 2 :(得分:0)
尝试编辑/ etc / hosts
127.0.0.1 localhost.localdomain localhost example.com
127.0.0.1 localhost
在服务器配置中增加proxy_read_timeout 60s;
也很有用。默认情况下它是60秒,但你可以做360秒或其他东西。
并且不要忘记重新启动服务(网络,nginx,后缀等)