【笔记】请求数据时浏览器报.NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 错误的解决办法

Linux tytrock ⋅ 于 2023-05-17 09:48:19 ⋅ 1907 阅读

今天在新服务器里部署的系统在向服务器请求数据时偶尔会出现无法返回数据的情况,浏览器的console报net::ERR_INCOMPLETE_CHUNKED_ENCODING 200的错误

image.png


服务器使用的是nginx+php,进入nginx的日志文件error.log,发现有如下错误信息

[warn] 22813#22813: *9487 an upstream response is buffered to a temporary file /var/cache/nginx/fastcgi_temp/8/45/0000000458 while reading upstream, ....


问题分析

先简单的说一下 Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制

比如如下配置:

fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;

fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 84K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 24K 共 2 个 buffers。


当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。同时你会在 error.log 中上面的warnning信息。

显然,缓冲区设置的太小的话,Nginx 会频繁读写硬盘,对性能有很大的影响,但也不是越大越好,需根据网站的页面大小进行调整。


问题解决

在nginx.conf 的http 里加入如下一段得到解决

fastcgi_buffer_size 512k;
fastcgi_buffers 8 512k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k

另外,如果nginx以proxy模式运行,则需更改上面一段为如下内容:

proxy_buffer_size 512k;
proxy_buffers 8 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;




本帖已被设为精华帖!
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter