上游響應緩衝到 臨時文件
我有一個相當大且速度較慢(複雜數據,複雜前端)的 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,但在我看來有點尷尬(我的代理嘗試緩衝但沒有文件可以緩衝到…怎麼能更快?)。我的問題是:
- 我怎樣才能刪除
$$ warn $$並避免緩衝響應?關閉
proxy_buffering
還是設置proxy_max_temp_file_size
為0更好?為什麼? 2. 如果nginx
緩衝響應:它何時為緩衝的響應提供服務,向誰提供服務,為什麼? 3. 為什麼預設nginx
開啟proxy_buffering
然後$$ warn $$如果它真的緩衝響應,你呢? 4. 響應何時觸發該選項?何時需要>幾秒鐘(多少?)來提供響應?這是可配置的嗎?
TIA,NGW。
- 我怎樣才能刪除$$ warn $$並避免緩衝響應?關閉 proxy_buffering 或將 proxy_max_temp_file_size 設置為 0 更好嗎?為什麼?
您應該設置
proxy_max_temp_file_size
為 0 才能刪除它。該proxy_buffering
指令與警告沒有直接關係。您可以將其關閉以完全停止任何緩衝,但通常不建議這樣做(除非Comet需要它)。
- 如果 nginx 緩沖一個響應,它什麼時候提供緩衝的響應,給誰,為什麼?
它會立即提供響應,但客戶端的連接速度通常要慢得多,並且無法像應用程序生成響應數據那樣快地使用響應數據。Nginx 嘗試緩衝整個響應以盡快釋放您的應用程序。
另見:http ://aosabook.org/en/nginx.html
- 為什麼nginx預設打開proxy_buffering然後$$ warn $$如果它真的緩衝響應,你呢?
正如我已經提到的,
proxy_buffering
與警告沒有直接關係。優化代理操作通常需要它,關閉它會降低性能和吞吐量。Nginx 僅在響應不適合配置的記憶體緩衝區時向您發出警告。如果對您沒問題,您可以忽略該警告。
- 響應何時觸發該選項?何時需要超過幾秒鐘(多少?)來提供響應?這是可配置的嗎?
它在記憶體緩衝區已滿時觸發。請看文件,解釋了整個機制:http: //nginx.org/r/proxy_max_temp_file_size
您可能想要增加記憶體緩衝區。