nginx缓冲机制Nginx将来自fastcgi的响应数据缓冲到内存中,然后依次发送给客户端浏览器。缓冲区的大小由fastcgi_buffers和fastcgi_buffer_size这两个值控制。例如下面的配置:fastcgi_buffers464k;fastcgi_buffer_size64K;fastcgi_buffer_size:用于指定读取FastCGI响应的第一部分所需的缓冲区大小,该值表示将使用一个64KB的缓冲区来读取第一部分响应的(响应头),可以设置为由fastcgi_buffers选项指定的缓冲区大小。fastcgi_buffers:指定本地需要多少缓冲区和多大缓冲区来缓冲FastCGI响应请求。如果一个PHP脚本生成的页面大小是256KB,那么会分配四个64KB的缓冲区用于缓存;如果pagesize大于256KB,大于256KB的部分会缓存到fastcgi_temp指定的路径中,但这不是好办法,因为数据在内存中的处理速度比在硬盘中快。一般这个值应该是站点中PHP脚本生成的页面大小的中间值。如果站点上大多数脚本生成的页面大小为256KB,那么这个值可以设置为“1616k”、“464k”等。所以总共可以创建的最大内存缓冲区大小是464K+64K=320k。而且这些buffer是根据实际的Response大小动态生成的,不是一次性创建的。比如对于一个128K的页面,Nginx会创建2个264K的缓冲区。当Response小于等于320k时,当然所有的数据都会在内存中处理。如果Response大于320k怎么办?这就是fastcgi_temp所做的。多余的数据会暂时写入文件,放在这个目录下。320K缓存在内存中,剩下的会写入文件。实际情况是运行Nginx进程的用户对fastcgi_temp目录没有写权限,所以剩下的数据就丢失了。nginx中有缓冲机制。当数据过大,超过buffer的最大容量时,将数据写入临时文件(fastcgi_temp目录下)时,如果没有该目录的权限,超出buffer的数据会丢失,并且将发生截断。
