【51CTO獨(dú)家特稿】本文所介紹的方法應(yīng)該是目前讓PHP最快的辦法:Nginx + PHP-FPM + APC。我們將從安裝Nginx http服務(wù)器、PHP和PHP-FPM補(bǔ)丁,以及APC,詳細(xì)的講解這種方法的具體配置及應(yīng)用,最終的效果如何?相信會(huì)讓你大吃一驚。
相關(guān)文章推薦:Nginx http服務(wù)相關(guān)的配置文件 Nginx+PHP配置相關(guān)進(jìn)程的簡(jiǎn)要介紹
背景
過去兩年多來,我們的網(wǎng)站一直運(yùn)行Apache+mod_php模塊,大多數(shù)時(shí)候這個(gè)組合應(yīng)付得過來,但隨著流量的增加,我們注意到Apache已 經(jīng)顯得很吃力了,它開始瘋狂地吃內(nèi)存,CPU也被全部搶占去了,我們需要找到一個(gè)更快的方法來解決問題。
Nginx是一個(gè)不錯(cuò)的選擇,很多指標(biāo)都超過了Apache,如I/O、CPU、內(nèi)存和請(qǐng)求數(shù)/秒等,如果需要,隨時(shí)可以從Google搜索相關(guān)信 息。從我個(gè)人的測(cè)試結(jié)果來看,Nginx和Apache之間的差異是很明顯的,不好意思,因?yàn)槭欠钦綔y(cè)試,因此相關(guān)數(shù)字我就不公布了,這也不是本文的重 點(diǎn)。讓我更自信的是,我只需要幾個(gè)步驟就可以讓性能遠(yuǎn)超Apache。
PHP-FPM?
很多人配置Nginx時(shí)可能都會(huì)選擇來自LightTPD項(xiàng)目的spawn-fcgi解析PHP,但使用spawn-fcgi有些問題,因此我打算 放棄它另覓別的辦法。PHP-FPM是PHP FastCGI Process Manager的縮寫,即PHP FastCGI進(jìn)程管理器,實(shí)際上它是PHP的一個(gè)補(bǔ)丁,旨在將FastCGI進(jìn)程管理整合進(jìn)PHP包中。
注意:即使你堅(jiān)持使用Apache,也有很多原因跳過mod_php,直接通過FastCGI解析PHP。使用mod_php時(shí),Apache處理 載入PHP的每個(gè)請(qǐng)求會(huì)載入所有的庫(kù),這是一個(gè)巨大的無畏開銷。如果使用FastCGI,PHP的行為更象應(yīng)用程序服務(wù)器,PHP-FPM以及 spawn-fcgi按需要載入和殺掉PHP實(shí)例,這樣做有很多好處,其中很重要的一點(diǎn)就是減少內(nèi)存開銷。
讓我們開始吧
我們使用的是全新安裝的Ubuntu 8.10 Intrepid,第一件事情是安裝所有的依賴包。
- sudo apt-get install make bison flex gcc patch autoconf subversion locate
- sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev
準(zhǔn)備好依賴包之后,我們就可以開始。
編譯PHP
我們下載的是PHP 5.2.8源代碼包,還有對(duì)應(yīng)的PHP-FPM補(bǔ)丁,我們先打上補(bǔ)丁,然后再編譯。
- cd /usr/local/src/
- sudo wget http://us.php.net/get/php-5.2.8.tar.gz/from/this/mirror
- sudo tar zvxf php-5.2.8.tar.gz
- sudo wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
- sudo gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | sudo patch -d php-5.2.8 -p1
- cd php-5.2.8
- sudo ./configure --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --disable-pdo --with-pgsql --with-curl --disable-debug --enable-pic --disable-rpath --enable-inline-optimization --with-bz2 --with-xml --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-xslt --enable-memcache --enable-zip --with-pcre-regex
- sudo make all install
- sudo strip /usr/local/bin/php-cgi
如果在運(yùn)行上面命令時(shí)遇到錯(cuò)誤,很可能是因?yàn)槿鄙僖蕾嚢斐傻摹A硗?,確保你正確啟用和禁用了特定的PHP配置選項(xiàng)。緊接著我們通過PECL安裝一 些將會(huì)用到的模塊:
- sudo pecl install memcache
- sudo pecl install apc
- sudo pecl install syck-beta
在安裝apc模塊時(shí),請(qǐng)務(wù)必關(guān)閉Apache選項(xiàng),如果你沒有關(guān)閉,它也會(huì)提醒你。接下來復(fù)制我們常用的php.ini:
- sudo cp /usr/local/src/php-5.2.8/php.ini-recommended /usr/local/lib/php.ini
最后,我們建立符號(hào)鏈接:
- sudo mkdir /etc/php/
- sudo ln -s /usr/local/lib/php.ini /etc/php/php.ini
- sudo ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf
PHP編譯到此結(jié)束,剩下要做的事情是修改php-fpm.conf設(shè)置,用文本編輯器打開/etc/php/php-fpm.conf,將進(jìn)程屬 主用戶修改為www-data,這個(gè)文件比較大,因此最好使用搜索功能,我想修改的值分別位于51、52、63和66行。
- <value name="owner">www-datavalue>
- <value name="group">www-datavalue>
- <value name="user">www-datavalue>
- <value name="group">www-datavalue>
聯(lián)系客服