nginx uwsgi django当大要求主体和过期会话时返回502



我有一个django视图,即随机大小的过程后请求(在20 char到30k char之间)。此API仅适用于注册用户,并通过会话标题进行验证。API与我的测试用例很好,但我注意到NGINX日志中约有502。错误日志显示此行::

2016/12/26 19:53:15 [error] 1048#0: *72 sendfile() failed (32: Broken pipe) while sending request to upstream, client: XXX.XXX.XXX.XXX, server: , request: "POST /api/v1/purchase HTTP/1.1", upstream: "uwsgi://unix:///opt/project/sockets/uwsgi.sock:", host: "staging.example.com"

经过一些测试后,我设法通过大的身体请求重新创建了这个电话。

curl -XPOST https://staging.example.com/api/v1/purchase 
-H "Accept: application/json" 
-H "token: development-token" 
-H "session: bad-session" 
-i -d '{"receipt-data": "<25677 character string>"}'
HTTP/1.1 100 Continue
HTTP/1.1 502 Bad Gateway
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 26 Dec 2016 19:54:32 GMT
Content-Type: text/html
Content-Length: 181
Connection: keep-alive
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.4.6 (Ubuntu)</center>
</body>
</html>

似乎发生的是Django检查会话是否有效,并在客户完成之前返回响应(403)。

如果我正确,是否有一种方法可以使Django在检查标头后将其发送100个状态?

如果没有,是否有比在检查标题之前等待身体更优雅的解决方案?

我找到了一个语句,将HTTP标头connection:keep-alive添加到客户端应解决此问题。我稍后会验证它,但已经在这里发布,希望它能帮助某人。

最新更新