这是我当前的配置...
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 128 32k;
proxy_send_timeout 20;
proxy_read_timeout 20;
#proxy_max_temp_file_size 1m;
proxy_temp_path /dev/shm/nginx_proxy_buffer;
proxy_pass $url;
我以前没有启用 proxy_buffering,但是我的新服务器的软件中断百分比 (%si) 非常高,因此当我的反向代理处理大约 300 mbit 时,CPU 就会成为瓶颈。
通过代理缓冲,软件中断会下降,并且我可以获得与服务器连接的几乎完整 gbit 的传输速率。
但是传入带宽几乎是传出带宽的两倍!速率当然会波动,但平均而言,我的传入速率几乎是传出带宽的两倍,我不明白。这非常糟糕,因为我的 95%ile 计费采用传入/传出的最大值...
据我所知,如果用户取消下载,已经从源服务器传输到缓冲区的数据将丢失,从而导致此行为。然而,发生这种情况并导致 100% 超额,这很荒谬......
欢迎任何意见!
答案1
您是否为客户端启用了 gzip?这可以解释差异,因为 nginx <-> 后端连接默认情况下未压缩(我不记得最近的 http/1.1 后端支持和 gunzip 筛选模块是否允许您在 nginx 和后端服务器之间安全地启用 gzip)。
编辑:但这并不能解释为什么在禁用 proxy_buffering 的情况下看不到此行为。也许更多的客户端如果必须等待就会断开连接?