NGINX和PHP是目前最流行的Web服務(wù)器和服務(wù)器腳本語(yǔ)言,但是由于這些服務(wù)的配置安裝實(shí)際上是很有難度的,因此需要一定的優(yōu)化才能確保它們能夠最好的運(yùn)行。
就像任何其他的技術(shù)一樣,優(yōu)化PHP和NGINX需要找到性能瓶頸。正確的定位,分析和解決瓶頸允許我們改進(jìn)服務(wù)器的性能和響應(yīng)時(shí)間。
最好的實(shí)踐就是減輕HTTP請(qǐng)求的開(kāi)銷和使用緩存來(lái)減少對(duì)Web服務(wù)器的負(fù)載。下面將會(huì)介紹在NGINX和PHP里如何最有效的優(yōu)化Web服務(wù)器。
1. 正確的使用緩存技術(shù)
許多系統(tǒng)都依賴于緩存來(lái)減少服務(wù)器的負(fù)載,從而加快頁(yè)面的加載速度。緩存是一種輕量而強(qiáng)大的工具,可以緩存重復(fù)的數(shù)據(jù),這樣就不必每次都從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。
對(duì)于PHP頁(yè)面,可以使用Memcache或Redis作為緩存,而對(duì)于靜態(tài)文件,可以將它們放在NGINX緩存中。正確的處理緩存可以大大提高Web應(yīng)用程序的性能和可擴(kuò)展性。
以下是使用Memcache緩存在PHP應(yīng)用程序中的示例代碼:
$cache = new Memcached(); $cache->addServer('localhost', 11211); //存儲(chǔ)/檢索 $data = $cache->get('some-key'); if (!$data) { $data = fetchDataFromDatabase(); $cache->set('some-key', $data, 3600); } //返回 $data 數(shù)據(jù)
在上面的示例中,來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)在緩存中,時(shí)間為3600秒。從緩存中讀取數(shù)據(jù)是比從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)要快得多的。
2. 配置 NGINX 緩存
既然提到了緩存,如何在NGINX中使用呢?可以在NGINX中使用proxy_cache模塊來(lái)配置緩存。
以下是一個(gè)簡(jiǎn)單的NGINX緩存示例,我們將緩存目錄設(shè)置為`/var/cache/nginx`:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { listen 80; server_name example.com; location / { proxy_cache my_cache; proxy_pass http://backend; } }
在上面的示例中,`proxy_cache_path`命令定義了緩存路徑,并為該緩存分配了10MB的空間。`inactive`指服務(wù)器在“閑置”60分鐘后,將自動(dòng)清除緩存。
下一步是使用`proxy_cache`指令給指定位置設(shè)置緩存。這將告訴NGINX將響應(yīng)結(jié)果存儲(chǔ)在緩存中,以便于將來(lái)快速的訪問(wèn)這些緩存。
3. 配置 PHP 環(huán)境
一個(gè)優(yōu)化過(guò)的PHP環(huán)境將大大提高Web應(yīng)用程序的性能。有幾個(gè)方面需要關(guān)注。
首先,包含的PHP模塊。如果您不需要龐大的代碼庫(kù)來(lái)拉低服務(wù)器性能,則最好刪除PHP中的不必要模塊。
其次,優(yōu)化PHP解釋器。被廣泛使用的IO非阻塞PHP FastCGI Runner for NGINX(php-fpm)是一個(gè)非常有效的解釋器,并且將使您的PHP腳本更快地運(yùn)行。
最后,啟用OPcache。OPcache是一種用于緩存PHP代碼的內(nèi)置PHP擴(kuò)展程序,它可以大大提高代碼執(zhí)行速度。
以下是如何啟用OPcache的示例代碼:opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=4000 opcache.interned_strings_buffer=8 opcache.fast_shutdown=1 opcache.revalidate_freq=60
在上面的示例中,我們啟用了OPcache并分配128MB的內(nèi)存。在4,000個(gè)已編譯的腳本達(dá)到時(shí),最大加速文件數(shù)被限制。`interned_strings_buffer`是OPcache的第二個(gè)關(guān)鍵部分,而`revalidate_freq`則設(shè)置了驗(yàn)證緩存的周期。
綜上,優(yōu)化NGINX和PHP的最佳實(shí)踐將幫助提高Web應(yīng)用程序的性能和可擴(kuò)展性。緩存技術(shù)和正確的PHP環(huán)境配置是優(yōu)化的兩個(gè)關(guān)鍵因素。在尋找性能瓶頸時(shí),請(qǐng)遵循最佳實(shí)踐,并定期進(jìn)行調(diào)優(yōu)以確保最佳運(yùn)行效果。