Django nginx/gunicorn连接挂起60秒
我正在对nginx->gunicorn->Django应用程序执行HTTP POST请求。响应主体很快返回,但请求在大约60秒后才完全完成 我所说的“完全完成”是指我尝试过的各种客户端(Chrome、wget、我正在构建的Android应用程序)表明请求仍在进行中,好像在等待更多数据。从Wireshark收听时,我看到所有数据都很快到达,60秒后,ACK FIN终于出现了 本地开发服务器(Django nginx/gunicorn连接挂起60秒,django,nginx,timeout,gunicorn,Django,Nginx,Timeout,Gunicorn,我正在对nginx->gunicorn->Django应用程序执行HTTP POST请求。响应主体很快返回,但请求在大约60秒后才完全完成 我所说的“完全完成”是指我尝试过的各种客户端(Chrome、wget、我正在构建的Android应用程序)表明请求仍在进行中,好像在等待更多数据。从Wireshark收听时,我看到所有数据都很快到达,60秒后,ACK FIN终于出现了 本地开发服务器(/manage.py runserver)上的相同POST请求会快速执行。此外,它绕过nginx,直接对gu
/manage.py runserver
)上的相同POST请求会快速执行。此外,它绕过nginx,直接对gunicorn快速执行。在Apache/mod_wsgi设置中也可以快速工作
GET请求没有问题。甚至其他的帖子请求也可以。我知道的一个区别是,这个特定的请求返回201而不是200
我认为这与内容长度
标题、封闭连接与保持连接有关,但还不知道应该如何正确工作
- 后端服务器(gunicorn)当前正在关闭连接,这是有意义的
- 后端服务器应该包括
,还是内容长度标题
?或者nginx是否应该能够在没有这些功能的情况下进行处理,并根据需要添加它们传输编码:分块
- 我假设连接保持活动状态很好,并且不应该在nginx中禁用
更新:在
nginx.conf
中将keepalive\u timeout
设置为0可以解决我的问题。但是,当然,“保持活力”已经不复存在了。我还是不确定是什么问题。可能堆栈中的某些东西(我的Django应用程序或gunicorn)没有正确实现分块传输,并且会混淆客户端。听起来您的上游服务器(gunicorn)在某种程度上在特定的api调用上保持连接打开-我不知道为什么(我想这取决于您的代码),但nginx中的默认选项是60秒,因此,出于某种原因,似乎没有收到这种回应
我使用了一个非常类似的设置,我一般不会注意到帖子上的任何问题,或者任何其他请求
请注意,return-HttpResponse(status=201)
以前曾引起过我的问题-Django似乎更喜欢显式的空主体:return-HttpResponse(“,status=201)
。我通常会把一些东西放在我期望的地方——这可能是需要注意的