Flask 502 错误解决:upstream sent too big header and invalid request block size

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:Flask 502 错误解决:upstream sent too big header and invalid request block size
  • 本文链接:http://zengrong.net/post/2614.htm

前段时间用 Flask 制作的一个网站在进行较大量计算时频繁出现 502 错误,在本地调试却无法重现发现,我怀疑是服务器配置问题。现已查明原因,分别是 Nginx 配置和 uwsgi 配置造成的。

upstream sent too big header while reading response header from upstream

这个错误的可以在 Nginx log 中找到:

2017/01/06 16:42:17 [error] 15273#0: *1087067 upstream sent too big header while reading response header from upstream, client: xxx.xx.xxx.98, server: xxx.bbb.com, request: "GET /kpi/sheets/calc/?team_id=client&ks_date=2016-12&typ=all HTTP/1.1", upstream: "uwsgi://127.0.0.1:5000", host: "xxx.bbb.com", referrer: "http://xxx.bbb.com/kpi/sheets/client/2016-12/"

这是一个缓存设置的问题,打开 nginx 配置,加入两行配置即可:

uwsgi_buffers 16 16k;
uwsgi_buffer_size 32k;

注意,如果你没有明确写入这两个参数,它们的默认值为:

uwsgi_buffers 8 4k|8k; # 根据操作系统内存页大小
uwsgi_buffer_size 4k|8k; # 根据操作系统内存页大小

具体配置的说明可以参考 uwsgi_buffersuwsgi_buffer_size

解决方案来自于这个回答: upstream sent too big header while reading response header from upstream ,该回答针对 fastcgi ,改为 uwsgi 即可。

如何配置 Nginx 可以参考我的文章《部署Flask + uWSGI + Nginx》 中的 配置 Nginx + uwsgi

invalid request block size

另一个 502 错误则是由 uwsgi 造成的。现象是 uwsgi 的 log 中出现了这样的提示:

invalid request block size: 4363 (max 4096)...skip

将 uwsgi 配置文件中的 buffer-size 设置为较大的值即可,例如我设置为32KB:

buffer-size = 32768

如何配置 Nginx 可以参考我的文章《部署Flask + uWSGI + Nginx》 中的 配置 uwsgi