分享个人 Full-Stack JavaScript 项目开发经验
使用 Nginx 作为反向代理时,我们希望它尽可能快、尽可能多地接收上游服务器的响应,并一次性全部发送给客户端。如果来自上游服务器的响应被写到磁盘的临时文件中缓冲时,响应的性能就会受到影响。应权衡应用的并发量和内存硬盘开销,调整它的缓冲配置。
看 my_proxy.conf 的以下配置:
# 省略....
proxy_ignore_headers X-Accel-Buffering;
proxy_buffer_size 4k;
proxy_buffers 155 4k;
proxy_busy_buffers_size 64k;
# 省略....
代理模块缓冲指令说明如下:
指令 | 说明 |
---|---|
proxy_buffer_size | 设置用于缓冲上游服务器第一部分响应的缓冲大小,在该部分中能找到响应头。默认值为:4k|8K(平台依赖),也即一个内存页大小。然而,它也可以设置得更少。 |
proxy_buffering | 指令启用或禁用缓冲上游服务器的响应,默认值为:on。 当启用缓冲时,Nginx 第一时间收到来自上游服务器的响应并保存到指令 proxy_buffer_size 和 proxy_buffers 设置的缓冲中。如果整个响应超过缓冲内存大小,则剩余的部分会被保存到硬盘的临时文件中。临时文件的最大大小和一次写入的最大大小通过指令 proxy_max_temp_file_size 和 proxy_temp_file_write_size 控制。 如果缓冲被禁用,则响应会同步发送给客户端,Nginx 不会尝试读取来自上游服务器的整个响应。这时,Nginx 一次能接收 proxy_buffer_size 指令设置的缓冲大小的响应。 上游服务器设置 X-Accel-Buffering 响应头为 no 可以禁止缓冲。这时可以使用 proxy_ignore_headers 指令来忽略这个响应头。 |
proxy_buffers | 设置单个连接的,用于读取上游服务器响应的缓冲数量和大小。默认情况下,缓冲大小等于一个内存页的大小,即 4k|8k(平台依赖)。默认值为:8 4k|8k。 |
proxy_busy_buffers_size | 当启用缓冲上游服务器的响应时,设置一部分缓冲大小用于发送客户端响应,即使这是来自上游服务器的响应还没完全接收。而剩余部分的缓冲大小用于继续读取响应,必要时将部分响应保存到临时文件。该值受 proxy_buffer_size 和 proxy_buffers 指令设置的大小限制,典型的设置为 proxy_buffers 单个缓冲大小的两倍。 |
考虑到本博客的并发量并不高,空闲的内存能满足所有访问需求,配置中加大了缓冲区的总大小,使其能一次缓冲整个最大 620k 的上游服务器响应,使客户端能够更快的被响应。
了解更多官方 http 代理模块的最新说明,请点击这里。