原文网址:https://www.youyong.top/article/1158d215291e
对于an upstream response is buffered:
加大nginx配置文件中下面两个值:
fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;
但是加多大那?
那要看看nginx 的 buffer 机制了:
对于来自 fastCGI server 的 response,nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。
fastcgi_buffers 8 4K 这样的配置,控制了nginx最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 response时第一个缓冲区的大小,不包含在前者中。所以上面的配置总计允许nginx创建的最大内存缓冲区大小是 8*4K+4K = 36k。
这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个8K的页面,nginx会创建 2*4K 共2个buffers。
当 response小于等于36k时,所有数据当然全部在内存中处理。如果 response大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。同时你会在 error.log 中看到一条类似 warning:
[warn] 6281#0: *33631203 an upstream response is buffered to a temporary file /data/app/nginx/fastcgi_temp/9/06/0000000069 while reading upstream
显然,缓冲区设置的太小的话,nginx 会频繁读写硬盘,对性能有很大的影响,但也不是越大越好,没意义
我要导出的文件大约 900k
所以我设置了
fastcgi_buffers 20 64k;
fastcgi_buffer_size 64k;
对于a client request body is buffered to a temporary file:
增加这个两个值的大小:
client_max_body_size 50m;
client_body_buffer_size 1024k;
原文网址:https://www.youyong.top/article/1158d215291e