使用Nginx最为反向代理的时候如果http的body超过缓冲区的大小后会被自动缓存到本地磁盘,当全部body都缓存完毕Nginx在向后端服务发送数据,这样这对http的body有大量数据的情况下性能非常差,在压力很高的情况下服务器的磁盘iops非常高。
Nginx本身不支持流的方式代理(目前我还有发现Nginx的proxy模块支持)。
通过nginx_lua可以灵活的控制socket,所以我使用Nginx_lua实现了一个流的方式代理,既Nginx收到请求的时候,先读取整个header,然后读取body的时候是一边读取一遍转发到后端。所有的数据都不会落地到磁盘上。
我的博客: