nginx,uwsgi,DJango,502 当 DEBUG=False,“上游过早关闭连接”

Posted

技术标签:

【中文标题】nginx,uwsgi,DJango,502 当 DEBUG=False,“上游过早关闭连接”【英文标题】:nginx, uwsgi, DJango, 502 when DEBUG=False, "upstream prematurely closed connection" 【发布时间】:2015-12-04 12:26:46 【问题描述】:

我有一个运行 Django 应用程序的工作 nginx 生产服务器,使用 uwsgi(设置为 this tutorial)。

nginx 和 uwsgi 正在通过 UNIX 套接字进行通信。

但是,只要我在 Django 设置中打开 DEBUG = False,就会收到 502 错误。 nginx错误日志告诉我:

2015/09/08 10:37:51 [error] 940#0: *4 upstream prematurely closed connection while reading response header from upstream, client: myIP, server: mydomain.ca, request: "GET /quests/ HTTP/1.1", upstream: "uwsgi://unix:///tmp/hackerspace.sock:", host: "myDomain"

如何防止套接字连接超时,为什么 DEBUG = False 会产生这种差异?

谢谢!

【问题讨论】:

你检查过uwsgi日志吗? 报错成功了吗? @Lukasz 不,但我将在下周再次尝试退出调试模式,如果找到解决方案,我会报告给大家。 【参考方案1】:

我找到了适合我的解决方案。我必须在 django 的 settings.py 中为 ALLOWED_HOSTS 列表指定主机

ALLOWED_HOSTS = ['example.com', 'example.dev']

【讨论】:

【参考方案2】:

“ALLOWED_HOSTS”答案也解决了我的问题。需要详细说明的一件事,因为无论如何我都不清楚,所以您在此处输入的值是您的网站将被访问的潜在域名(IP 等)。 如果您的站点是http://mysite.here/,那么您需要将“mysite.here”放入 ALLOWED_HOSTS 列表中。显然,使用 Debug=True 没有 HOST 验证,一旦它切换到 False 系统开始拒绝任何 HOST: 标头值未出现在列表中的请求。进一步阅读: https://docs.djangoproject.com/en/1.10/ref/settings/

【讨论】:

以上是关于nginx,uwsgi,DJango,502 当 DEBUG=False,“上游过早关闭连接”的主要内容,如果未能解决你的问题,请参考以下文章

Django Nginx uWSGI 502 Bad Gateway 总是

django+uwsgi+nginx: websock 报502/400

Nginx+uWSGI+Django 在大请求正文和过期会话时返回 502

Django uWSGI Nginx

python3 + Django + uwsgi + nginx 配置部署笔记

错误:从上游 [uWSGI/Django/NGINX] 读取响应标头时,上游过早关闭连接