1. 程式人生 > >nginx 關於Nginx的一些優化(突破十萬併發)

nginx 關於Nginx的一些優化(突破十萬併發)

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

這個指令為FastCGI快取指定一個路徑,目錄結構等級,關鍵字區域儲存時間和非活動刪除時間。

fastcgi_connect_timeout 300;

指定連線到後端FastCGI的超時時間。

fastcgi_send_timeout 300;

向FastCGI傳送請求的超時時間,這個值是指已經完成兩次握手後向FastCGI傳送請求的超時時間。

fastcgi_read_timeout 300;

接收FastCGI應答的超時時間,這個值是指已經完成兩次握手後接收FastCGI應答的超時時間。

fastcgi_buffer_size 16k;

指定讀取FastCGI應答第一部分需要用多大的緩衝區,這裡可以設定為fastcgi_buffers指令指定的緩衝區大小,上面的指令指定它將使用1個16k的緩衝區去讀取應答的第一部分,即應答頭,其實這個應答頭一般情況下都很小(不會超過1k),但是你如果在fastcgi_buffers指令中指定了緩衝區的大小,那麼它也會分配一個fastcgi_buffers指定的緩衝區大小去快取。

fastcgi_buffers 16 16k;

指定本地需要用多少和多大的緩衝區來緩衝FastCGI的應答,如上所示,如果一個PHP指令碼所產生的頁面大小為256k,則會為其分配16個16k的緩衝區來快取,如果大於256k,增大於256k的部分會快取到fastcgi_temp指定的路徑中,當然這對伺服器負載來說是不明智的方案,因為記憶體中處理資料速度要快於硬碟,通常這個值的設定應該選擇一個你的站點中的php指令碼所產生的頁面大小的中間值,比如你的站點大部分指令碼所產生的頁面大小為256k就可以把這個值設定為16 16k,或者4 64k 或者64 4k,但很顯然,後兩種並不是好的設定方法,因為如果產生的頁面只有32k,如果用4 64k它會分配1個64k的緩衝區去快取,而如果使用64 4k它會分配8個4k的緩衝區去快取,而如果使用16 16k則它會分配2個16k去快取頁面,這樣看起來似乎更加合理。

fastcgi_busy_buffers_size 32k;

這個指令我也不知道是做什麼用,只知道預設值是fastcgi_buffers的兩倍。

fastcgi_temp_file_write_size 32k;

在寫入fastcgi_temp_path時將用多大的資料塊,預設值是fastcgi_buffers的兩倍。

fastcgi_cache TEST

開啟FastCGI快取並且為其制定一個名稱。個人感覺開啟快取非常有用,可以有效降低CPU負載,並且防止502錯誤。但是這個快取會引起很多問題,因為它快取的是動態頁面。具體使用還需根據自己的需求。

fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

為指定的應答程式碼指定快取時間,如上例中將200,302應答快取一小時,301應答快取1天,其他為1分鐘。

fastcgi_cache_min_uses 1;

快取在fastcgi_cache_path指令inactive引數值時間內的最少使用次數,如上例,如果在5分鐘內某檔案1次也沒有被使用,那麼這個檔案將被移除。

fastcgi_cache_use_stale error timeout invalid_header http_500;

不知道這個引數的作用,猜想應該是讓nginx知道哪些型別的快取是沒用的。 以上為nginx中FastCGI相關引數,另外,FastCGI自身也有一些配置需要進行優化,如果你使用php-fpm來管理FastCGI,可以修改配置檔案中的以下值:

<value name="max_children">60</value>

同時處理的併發請求數,即它將開啟最多60個子執行緒來處理併發連線。

<value name="rlimit_files">102400</value>

最多開啟檔案數。

<value name="max_requests">204800</value>

每個程序在重置之前能夠執行的最多請求數。

參考資料