1. 程式人生 > >Nginx an upstream response is buffered to a temporary file

Nginx an upstream response is buffered to a temporary file

意義 http word pre 依次 rar usr 同時 -a

1.錯誤日誌:warn:an upstream response is buffered to a temporary file

解決辦法:增加fastcgi_buffers 8 4K;     fastcgi_buffer_size 4K;

2. a client request body is buffered to a temporary file

解決辦法:增加client_max_body_size 2050m;     client_body_buffer_size 1024k;

Nginx 的 buffer 機制:

對於來自 FastCGI Server 的 Response,Nginx 將其緩沖到內存中,然後依次發送到客戶端瀏覽器。緩沖區的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個值控制。

比如如下配置:

fastcgi_buffers      8 4K;
fastcgi_buffer_size  4K;

fastcgi_buffers 控制 nginx 最多創建 8 個大小為 4K 的緩沖區,而 fastcgi_buffer_size 則是處理 Response 時第一個緩沖區的大小,不包含在前者中。所以總計能創建的最大內存緩沖區大小是 8*4K+4K = 36k。而這些緩沖區是根據實際的 Response 大小動態生成的,並不是一次性創建的。比如一個 8K 的頁面,Nginx 會創建 2*4K 共 2 個 buffers。

當 Response 小於等於 36k 時,所有數據當然全部在內存中處理。如果 Response 大於 36k 呢?fastcgi_temp 的作用就在於此。多出來的數據會被臨時寫入到文件中,放在這個目錄下面。同時你會在 error.log 中看到一條類似 warning:

2010/03/13 03:42:22 [warn] 3994#0: *1 an upstream response is buffered to a temporary file
/usr/local/nginx/fastcgi_temp/1/00/0000000001 while reading upstream, 
client: 192.168.1.111,
server: www.xxx.cn,
request: "POST /test.php HTTP/1.1",
upstream: "fastcgi://127.0.0.1:9000", 
host: "xxx.cn",
referrer: "http://xxx.cn/test.php"

顯然,緩沖區設置的太小的話,Nginx 會頻繁讀寫硬盤,對性能有很大的影響,但也不是越大越好,沒意義.

Nginx an upstream response is buffered to a temporary file