当请求体很大时,nginx返回格式错误的数据包/ 200没有响应

时间:2016-05-04 18:40:18

标签: django nginx django-rest-framework malformed

我已经在gunicorn后面使用nginx托管了我的Django休息框架API服务器。当我在请求中使用小主体将{API nginx命中时,响应就会出现。但是,如果有大的有效负载,它就不会返回200 OK响应。

但是,当我直接点击gunicorn时,它会返回正确的响应。

如果请求有效负载很大,NGNIX正在搞乱响应。

我通过tcpdump抓取了数据包,显示响应中包含MALFORMED PACKET。以下是TCP转储:

[Malformed Packet: JSON]
[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]
    [Malformed Packet (Exception occurred)]
    [Severity level: Error]
    [Group: Malformed]

NGINX配置:

  server {
listen 6678  backlog=10000;
client_body_timeout 180s;

location / {
  proxy_set_header  Host $host;
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_read_timeout 120s;
  proxy_connect_timeout 120s;

  proxy_pass    http://localhost:8000;
  proxy_redirect    default;
}
}

我从未见过NGINX在我身上打得很努力。任何帮助赞赏。

1 个答案:

答案 0 :(得分:0)

如果nginx和gunicorn在同一台服务器上运行,而不是使用环回来让两者相互通信,那么unix socket的性能会更高一些。我无法告诉您是否已经从配置代码段中执行此操作。我在gunicorn部署docs中看到的唯一可能有帮助的是client_max_body_size 4G;,根据nginx docs默认为1 MB。