Nginx

上游響應緩衝到 臨時文件

  • March 4, 2022

我有一個相當大且速度較慢(複雜數據,複雜前端)的 Web 應用程序內置RoR並作為反向代理Puma提供服務。nginx查看nginx錯誤日誌,我看到很多條目,例如:

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
   /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
   client: 5.144.169.242, server: engagement-console.foo.it, 
   request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
   upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
   host: "ec.reputationmonitor.it", 
   referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

我很好奇,因為對於不同的使用者和不同的使用者互動,頁面不太可能保持不變,而且我認為在磁碟上緩衝響應不是必要/有用的。

我知道proxy_max_temp_file_size並將其設置為 0,但在我看來有點尷尬(我的代理嘗試緩衝但沒有文件可以緩衝到…怎麼能更快?)。

我的問題是:

  1. 我怎樣才能刪除

$$ warn $$並避免緩衝響應?關閉proxy_buffering還是設置proxy_max_temp_file_size為0更好?為什麼? 2. 如果nginx緩衝響應:它何時為緩衝的響應提供服務,向誰提供服務,為什麼? 3. 為什麼預設nginx開啟proxy_buffering然後

$$ warn $$如果它真的緩衝響應,你呢? 4. 響應何時觸發該選項?何時需要>幾秒鐘(多少?)來提供響應?這是可配置的嗎?

TIA,NGW。

  1. 我怎樣才能刪除$$ warn $$並避免緩衝響應?關閉 proxy_buffering 或將 proxy_max_temp_file_size 設置為 0 更好嗎?為什麼?

您應該設置proxy_max_temp_file_size為 0 才能刪除它。該proxy_buffering指令與警告沒有直接關係。您可以將其關閉以完全停止任何緩衝,但通常不建議這樣做(除非Comet需要它)。

  1. 如果 nginx 緩沖一個響應,它什麼時候提供緩衝的響應,給誰,為什麼?

它會立即提供響應,但客戶端的連接速度通常要慢得多,並且無法像應用程序生成響應數據那樣快地使用響應數據。Nginx 嘗試緩衝整個響應以盡快釋放您的應用程序。

另見:http ://aosabook.org/en/nginx.html

  1. 為什麼nginx預設打開proxy_buffering然後$$ warn $$如果它真的緩衝響應,你呢?

正如我已經提到的,proxy_buffering與警告沒有直接關係。優化代理操作通常需要它,關閉它會降低性能和吞吐量。

Nginx 僅在響應不適合配置的記憶體緩衝區時向您發出警告。如果對您沒問題,您可以忽略該警告。

  1. 響應何時觸發該選項?何時需要超過幾秒鐘(多少?)來提供響應?這是可配置的嗎?

它在記憶體緩衝區已滿時觸發。請看文件,解釋了整個機制:http: //nginx.org/r/proxy_max_temp_file_size

您可能想要增加記憶體緩衝區。

引用自:https://serverfault.com/questions/587386