夹层联系表格产生"上游过早关闭"错误

时间:2018-06-01 20:51:25

标签: django nginx gunicorn digital-ocean mezzanine

我的网站使用Mezzanine 4.2.3与Django-Oscar 1.5.2和Django 1.10.8,在Digitalocean上运行Ubuntu 16.04。当我在使用createdb创建的演示页面上使用Mezzanine联系表单时,以及从我自己的计算机上,它成功发送了电子邮件。但是当我在运行Ubuntu 16.04的Digitalocean Droplet上测试时,我得到502坏网关。

nginx错误日志记录此错误:*13 upstream prematurely closed connection while reading response header from upstream, client: [an IP I can't identify], server: [my website url], request: "POST /contact/ HTTP/1.1", upstream: "http://unix:/home/my-django-app/my-django-app.sock:/contact/", host: "[my website url]", referrer: "[my website url]/contact/"。该数字在*1*7*13之间变化,但文字相同。

我用Google搜索并发现了各种可能的解决方案:

  • Increasing the timeout for nginx proxy_pass。这包括将proxy_connect_timeout 75s;proxy_read_timeout 300s;添加到nginx配置,然后将--timeout 300添加到gunicorn。这产生了实际的超时错误:*21 upstream timed out (110: Connection timed out) while reading response header from upstream,

  • Uncommenting precedence ::ffff:0:0/96 100 in /etc/gai.conf.

  • 在UFW中允许端口587。这不重要,因为如果我使用gmail,那么这应该是Google的一个端口,对吧?我之所以这样做是因为我看到了各种解决方案(大多数尚未解决),并谈到了解锁此端口的必要性。

  • 让nginx收听端口587:server {listen 80; listen 587; ... list 443 ssl; ...}

通过nginx侦听端口587,sudo netstat -tulnp | grep 587显示:

tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      12815/nginx -g daem

我的电子邮件设置似乎很好:

EMAIL_USE_TLS = True
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "!#%%&&*%^#$^*%@gmail.com"
EMAIL_HOST_PASSWORD = "^*#^@#$%&@$%%#$"
EMAIL_PORT = 587
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"

我也尝试使用端口465进行SSL。它适用于我的本地副本,但不适用于服务器。相同的错误消息502。

我认为"上游"表示gunicorn,所以我为它设置了一个错误日志,但是当页面加载时,它记录的全部是状态代码200和302。当502发生时,它没有记录任何事情。

我没有想法。我错过了什么?

2018年6月3日更新:

$ telnet smtp.gmail.com 587
Trying 108.177.96.109...
Trying 108.177.96.108...
Trying 2a00:1450:4013:c01::6c...
telnet: Unable to connect to remote host: Network is unreachable

用465和25也试过这个。这是否意味着Digitalocean阻止连接?有precedent

1 个答案:

答案 0 :(得分:0)

是的,Digitalocean会阻止SMTP。他们回复我的电子邮件:

  

为了帮助限制您帐户上的SMTP服务,可以   请告诉我们以下内容:

     
      
  1. 你的名字。
  2.   
  3. 您将代表其网站(如果存在)发送邮件的业务或个人。
  4.   
  5. 您要发送什么类型的邮件(密码重置,简报,营销邮件,订单等交易邮件)   确认)。
  6.   
  7. 如果您代表的是非自己的企业或个人,您与该企业或您的关系是什么   个体
  8.         

    此外,由于我们是一家美国公司,我想确保你   了解我们要求我们网络的所有用户同时遵循   CAN-SPAM的要求(   https://www.ftc.gov/tips-advice/business-center/guidance/can-spam-act-compliance-guide-business   )针对发送给任何订户的任何非交易邮件采取行动   世界上任何地方,以及CASL(   http://fightspam.gc.ca/eic/site/030.nsf/eng/home)您发送的任何电子邮件   发送给加拿大的任何订阅者。

         

    此外,发送电子邮件还有其他限制   欧盟用户及其成员创建的欧洲用户   国家,并建议您调查并遵循所有   您所在欧洲国家/地区的相关指南   可能有。

我回答了他们,他们回答说:

  

感谢您提供的信息。

     

我们已审核了这些信息,并已从中删除了SMTP阻止   你的帐户。

     

重申 - 我们要求订户遵循CAN-SPAM   代理所有电子邮件,以及发送给订阅者的任何电子邮件的CASL   加拿大。

     

如果您不这样做,我们收到违规投诉,我们可以撤销   我们可以自行决定访问SMTP,不再发出警告。