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