配置Nginx缓存的大小是一个非常重要的事情。 如果缓存大小设置的太小, Nginx将不得不把上游(用英文upsteams会更好)的相应结果存放到临时的缓存文件里面,这将会同时增加IO的读写操作, 而且流量越大问题越多。
client_body_buffer_size指令用来指定处理客户端请求的缓冲区大小, 这个代表了访问请求的body。 这是用来处理POST的数据,也就是通过提交表单,文件上传等请求的数据。 如果你需要处理很多大的POST请求的,你必须确保缓存区要设置的足够大。
fastcgi_buffers 和 proxy_buffers 指令用来处理上流(upstream)的响应结果, 也就是PHP Apache等。它的概念其实和上面提到的差不多, 如果缓冲区不足够大数据将在返回给用户使用之前被保存到磁盘上。 注意Nginx将这个buffer数据同步的传输给客户端之前,有一个缓存上限, 保存到磁盘也同样受限。 这个上线是通过fastcgi_max_temp_file_size和proxy_max_temp_file_size来设置的。 另外对于代理的连接你也可以通过把proxy_buffering设置成off来彻底的关闭缓存。(通常这不是一个好办法)。
彻底移除磁盘IO
最好的减少磁盘IO的方法无疑是不使用磁盘, 如果你的的应用只有少量的数据传输,你可以将数据都放入内存,这样就可以彻底不用考虑磁盘IO的阻塞了。 当然默认情况下你的操作系统也会缓存频繁访问的磁盘扇区, 所以内存越大磁盘的IO就会用到的越少。 这就意味着你可以通过增加内存来解决IO的瓶颈。 数据量越多,需要的内存越大。
网络IO
为了好玩,我们假设你有了足够大的内存来缓存你的所有数据。 这意味着理论上你的IO读速度达到了3-6gbps。 但是你没有那么快的网络通道。 不幸的是,我们可以优化的网络IO是有限的,我们要通过网络传输数据,所以还将受制于网络IO。 唯一真正有效的方法是尽量减少数据量或压缩。
幸运的是Nginx提供了gzip模块, 它可以使我们在将数据传输给客户端之前压缩它, 这将大大减少数据的大小。 一般来说gzip_comp_level的值不会在性能方面有多大的差别,设为为4-5即可。 一味的增加它是没有意义的只是浪费的CPU的周期。
你也可以通过一些Javascript和css缩小工具来减少传输文件大小。 但这些不是和Nginx很相关所以我相信你通过google可以获取更多的相关信息。