Flask 502 错误解决:upstream sent too big header and invalid request block size
前段时间用 Flask 制作的一个网站在进行较大量计算时频繁出现 502 错误,在本地调试却无法重现发现,我怀疑是服务器配置问题。现已查明原因,分别是 Nginx 配置和 uwsgi 配置造成的。
upstream sent too big header while reading response header from upstream
这个错误的可以在 Nginx log 中找到:
12017/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 配置,加入两行配置即可:
1uwsgi_buffers 16 16k;
2uwsgi_buffer_size 32k;
注意,如果你没有明确写入这两个参数,它们的默认值为:
1uwsgi_buffers 8 4k|8k; # 根据操作系统内存页大小
2uwsgi_buffer_size 4k|8k; # 根据操作系统内存页大小
具体配置的说明可以参考 uwsgi_buffers 和 uwsgi_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 中出现了这样的提示:
1invalid request block size: 4363 (max 4096)...skip
将 uwsgi 配置文件中的 buffer-size
设置为较大的值即可,例如我设置为32KB:
1buffer-size = 32768
如何配置 Nginx 可以参考我的文章《部署Flask + uWSGI + Nginx》 中的 配置 uwsgi 。
- 文章ID:2614
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/flask-502-uwsgi-buffer/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。