nginx 上的 proxy_request_buffering 和 proxy_buffering 有什么区别?

dci*_*ale 11 nginx

我看到 proxy_request_buffering 将缓冲请求和 proxy_buffering 响应。

但是,我想了解这意味着什么的内部结构。

ben*_*tek 12

来自 Nginx文档

Proxy_Buffering

Syntax: proxy_buffering on | off;
Default:    
proxy_buffering on;
Context:    http, server, location
Enables or disables buffering of responses from the proxied server.
Run Code Online (Sandbox Code Playgroud)

启用缓冲后,nginx 会尽快收到来自代理服务器的响应,将其保存到由proxy_buffer_sizeproxy_buffers指令设置的缓冲区中。如果整个响应不适合内存,可以将其中的一部分保存到磁盘上的临时文件中。写入临时文件由proxy_max_temp_file_sizeproxy_temp_file_write_size指令控制。

当缓冲被禁用时,响应会在收到时立即同步传递给客户端。nginx 不会尝试从代理服务器读取整个响应。nginx 一次可以从服务器接收的最大数据大小由proxy_buffer_size指令设置。

缓冲也可以通过在“X-Accel-Buffering”响应头字段中传递“yes”或“no”来启用或禁用。可以使用proxy_ignore_headers指令禁用此功能。

Proxy_Request_Buffering

Syntax: proxy_request_buffering on | off;
Default:    
proxy_request_buffering on;
Context:    http, server, location
This directive appeared in version 1.7.11.
Enables or disables buffering of a client request body.
Run Code Online (Sandbox Code Playgroud)

启用缓冲后,在将请求发送到代理服务器之前,将从客户端读取整个请求正文。

当缓冲被禁用时,请求正文会在收到时立即发送到代理服务器。在这种情况下,如果 nginx 已经开始发送请求正文,则请求无法传递到下一个服务器

当使用 HTTP/1.1 分块传输编码发送原始请求正文时,除非为代理启用HTTP/1.1,否则无论指令值如何,请求正文都将被缓冲。

  • 那么如果你发送一个 10GB 的文件,nginx 会在转发之前缓冲它吗?这不是意味着它会引入很多延迟吗? (2认同)