Centos

NGINX - 如果客戶端比使用 proxy_pass 的上游伺服器慢會發生什麼?

  • September 10, 2021

使用 proxy_pass - NGINX 如何處理客戶端連接速度比上游伺服器慢的情況,例如上游伺服器以 12MBPS 的速度將內容推送到 nginx 伺服器,但讀取內容的客戶端使用 1.2MBPS 連接?

   location / {

   proxy_buffering    off;
   proxy_http_version 1.1;
   proxy_set_header Connection "";
   proxy_buffer_size  128k;
   proxy_buffers 100  128k;
   proxy_set_header        Host            $host;
   proxy_set_header        X-Real-IP   $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass https://proxy.backend.server;}

在這種情況下,proxy_buffering 是關閉的,當客戶端到達數據中的那個點時,Nginx 是否保存要服務的數據?

它可以從文件中找到proxy_buffering

當緩衝被禁用時,響應會在收到時立即同步傳遞給客戶端。nginx 不會嘗試從代理伺服器讀取整個響應。nginx 一次可以從伺服器接收的最大數據大小由 proxy_buffer_size 指令設置。

換句話說,NGINX 保持與後端的連接更長時間(只要客戶端需要下載整個響應)。禁用緩衝後,客戶端和後端之間的連接是同步的。

是否要關閉代理緩衝取決於資源。通常有一個像 PHP-FPM 這樣的資源密集型後端,因此在客戶端下載響應期間不建議讓它一直掛著。因此,對於作為後端的 PHP-FPM(fastcgi_buffering 是正確的指令),我會繼續使用它。

同樣值得注意的是,即使禁用了代理緩衝,仍然有一些緩衝,比如 proxy_buffer_size 指令。這是關於正確調整大小的介紹。它僅包含標題。128k 是(可能)典型 HTML 頁面的大小。HTTP 標頭比這要小得多。

引用自:https://unix.stackexchange.com/questions/668503