查看Nginx日志,發(fā)現(xiàn)有很多報(bào)錯(cuò)
2021/02/27 17:00:54 [warn] 28#28: *49939
an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/6/14/0000000146 while reading upstream, client: xxx.xxx.xxx.x,
server: airflow.yidianshihui.com, request: "GET /home HTTP/1.1", upstream: "http://xxx.xxx.xxx.xxx:xxxx/home", host: "airflow.yidianshihui.com",
referrer: "http://airflow.yidianshihui.com/home?tags=%E6%AF%8F%E6%97%A5ic_sku%E5%90%8C%E6%AD%A5"
1.錯(cuò)誤日志: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 機(jī)制:
對(duì)于來(lái)自 FastCGI Server 的 Response赏酥,Nginx 將其緩沖到內(nèi)存中局扶,然后依次發(fā)送到客戶端瀏覽器。緩沖區(qū)的大小由 fastcgi_buffers 和 fastcgi_buffer_size 兩個(gè)值控制。
比如如下配置:
fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;
fastcgi_buffers 控制 nginx 最多創(chuàng)建 8 個(gè)大小為 4K 的緩沖區(qū),而 fastcgi_buffer_size 則是處理 Response 時(shí)第一個(gè)緩沖區(qū)的大小,不包含在前者中蕉世。所以總計(jì)能創(chuàng)建的最大內(nèi)存緩沖區(qū)大小是 84K+4K = 36k。而這些緩沖區(qū)是根據(jù)實(shí)際的 Response 大小動(dòng)態(tài)生成的婆硬,并不是一次性創(chuàng)建的。比如一個(gè) 8K 的頁(yè)面奸例,Nginx 會(huì)創(chuàng)建 24K 共 2 個(gè) buffers彬犯。
當(dāng) Response 小于等于 36k 時(shí),所有數(shù)據(jù)當(dāng)然全部在內(nèi)存中處理查吊。如果 Response 大于 36k 呢谐区?fastcgi_temp 的作用就在于此。多出來(lái)的數(shù)據(jù)會(huì)被臨時(shí)寫入到文件中逻卖,放在這個(gè)目錄下面宋列。同時(shí)你會(huì)在 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"
顯然,緩沖區(qū)設(shè)置的太小的話评也,Nginx 會(huì)頻繁讀寫硬盤炼杖,對(duì)性能有很大的影響,但也不是越大越好盗迟,沒意義
官方文檔:
http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size
修改Nginx配置:
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://elk_server/api;
client_body_buffer_size 1024k;
client_max_body_size 2050m;
fastcgi_buffers 8 4K;
fastcgi_buffer_size 4K;
}
參考:
Nginx性能調(diào)優(yōu)之buffer參數(shù)設(shè)置
nginx常見問(wèn)題