β

Flask 502 错误解决:upstream sent too big header and in

zrong's Blog 6 阅读

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

upstream sent too big header while reading response header from upstream

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

/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_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 中出现了这样的提示:

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

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

buffer-size = 32768

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

作者:zrong's Blog
可能是一个程序员
原文地址:Flask 502 错误解决:upstream sent too big header and in, 感谢原作者分享。

发表评论