fastcgi_buffer_size
語法:fastcgi_buffer_size the_size ;
默認值:fastcgi_buffer_size 4k/8k ;
使用字段:http, server, location
這個參數(shù)指定將用多大的緩沖區(qū)來讀取從FastCGI進程到來應答頭。
默認的緩沖區(qū)大小為fastcgi_buffers指令中的每塊大小,可以將這個值設置更小。
fastcgi_buffers
語法:fastcgi_buffers the_number is_size;
默認值:fastcgi_buffers 8 4k/8k;
使用字段:http, server, location
這個參數(shù)指定了從FastCGI進程到來的應答,本地將用多少和多大的緩沖區(qū)讀取。
fastcgi_buffers可以設置為你的FastCGI返回的大部分應答大小,這樣可以處理大部分的請求,較大的請求將被緩沖到磁盤。
如果想關閉對所有請求道磁盤的緩沖,可以將fastcgi_max_temp_file_size 設置為0。
fastcgi_buffer等于:fastcgi_buffer_size + the_number * is_size
如果一個fastcgi應答為12k,那么fastcgi_buffers 64 4k將分配3個4k的buffer。這便是為什么fastcgi_buffers有兩個參數(shù),而fastcgi_buffer_size(用于應答頭與應答的第一部分)只有1個參數(shù),在fastcgi_buffer_size被清空后,它們和fastcgi_buffers一起被使用。
在nginx運維中一個超普遍的錯誤就是502 Bad Gateway,此錯誤出現(xiàn)的原因有很多,本文主要探討FastCGI buffer的配置導致502 Bad Gateway。
Nginx 的 buffer 機制:來自 FastCGI Server 的 Response,Nginx 將其緩沖到內(nèi)存中,然后依次發(fā)送到客戶端瀏覽器。緩沖區(qū)的大小涉及的兩個參數(shù)是fastcgi_buffers 和 fastcgi_buffer_size 。
fastcgi_buffer_size指定將用多大的緩沖區(qū)來讀取從FastCGI進程到來應答頭。
fastcgi_buffers指定了從FastCGI進程到來的應答,本地將用多少和多大的緩沖區(qū)讀取。
如:fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
那么 fastcgi_buffer=16*16+16=272k
如果一個php腳本產(chǎn)生的頁面大小為32k,將分2個16k去緩存頁面,如果一個php腳本所產(chǎn)生的頁面大小為256k,則會為其分配16個16k的緩沖區(qū)來緩存,如果大于256k,增大于256k的部分會緩存到fastcgi_temp指定的路徑中,如果想關閉對所有請求道磁盤的緩沖,可以將fastcgi_max_temp_file_size 設置為0。通常這個值的設置應該選擇一個你的站點中的php腳本所產(chǎn)生的頁面大小的中間值。如果您服務器上的內(nèi)存夠大,可以將以上參數(shù)適當調(diào)大。當然以上參數(shù)并不是越大越好,也沒多大實際意義,需要根據(jù)您的實際情況,如頁面大小及服務器內(nèi)存大小,如果以上參數(shù)太小的話,就會頻繁的往磁盤寫數(shù)據(jù),對性能影響還是很大的,畢竟內(nèi)存的速度比硬盤大的多,可以增大以上參數(shù)來增加緩沖區(qū)的大小。
fastcgi 模塊配置手冊
以下為配置實例:
1 2 3 4 5 6 7 | fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; |
當然本文對nginx的研究也不夠深入,實為拋磚引玉,歡迎大家在評論中交流您的看法。