nginx,php-fpm,phpfastcgi,upstream實(shí)現(xiàn)負(fù)載均衡
應(yīng)用的最前端是一臺(tái)nginx服務(wù)器,所有靜態(tài)的內(nèi)容都由nginx來處理,而將所有php的請求都分?jǐn)偟较掠蔚娜舾膳_(tái)運(yùn)行php fastcgi守護(hù)進(jìn)程的服務(wù)器中,這樣可以以一種廉價(jià)的方案來實(shí)現(xiàn)對系統(tǒng)負(fù)載的分?jǐn)?,擴(kuò)展系統(tǒng)的負(fù)載能力。
三臺(tái)php fastcgi服務(wù)器的ip地址分別為:
172.16.236.110 , 172.16.236.111, 172.16.236.112
運(yùn)行php fastcgi進(jìn)程時(shí),需要讓php-cgi監(jiān)聽到服務(wù)器的局域網(wǎng)地址(分別如上所示),而不是之前一般都是監(jiān)聽的本地地址(127.0.0.1)。以172.16.236.110這臺(tái)服務(wù)器為例:
- /usr/local/php5/bin/php-cgi -b 172.16.236.110:9000
或許你用spawn-fcgi來啟動(dòng)php-fcgi,那么就是這樣(供參考,其實(shí)也就是修改監(jiān)聽的地址和端口即可):
- /usr/local/lighttpd/bin/spawn-fcgi -f /usr/local/php5/bin/php-cgi -a 172.16.236.110 -p 9000
又或許你是用php-fpm來管理php-fcgi,那么你需要修改php-fpm的配置
- vi /usr/local/php5/etc/php-fpm.conf
找到這個(gè)配置項(xiàng)(其中的地址可能需要根據(jù)你自己環(huán)境來調(diào)整)
- <value name="listen_address">127.0.0.1:9000</value>
修改為:
- <value name="listen_address">172.16.236.110:9000</value>
修改完畢后,重啟你的php-fpm進(jìn)程。
然后按照上面的步驟,依次修改其他php fastcgi服務(wù)器。
php方面的工作暫時(shí)就是這些,下面修改nginx。
- vi /usr/local/nginx/conf/nginx.conf
在配置文件的http段內(nèi)增加類似如下的配置:
- upstream myfastcgi {
- server 172.16.236.110 weight=1;
- server 172.16.236.111 weight=1;
- server 172.16.236.112 weight=1;
- }
我這里三臺(tái)php fastcgi服務(wù)器的權(quán)重是相同的,所以其中的weight值都是1,如果你的php fastcgi服務(wù)器需要分主次,那么可以通過調(diào)整其weight值來達(dá)到目的。比如以***臺(tái)服務(wù)器為主,其他兩臺(tái)為輔,則就是這樣:
- upstream myfastcgi {
- server 172.16.236.110 weight=1;
- server 172.16.236.111 weight=2;
- server 172.16.236.112 weight=2;
- }
然后找到原來nginx關(guān)于php fastcgi配置的部分,比如:
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
將其中的fastcgi_pass那一段改為:
- fastcgi_pass myfastcgi;
其中的myfastcgi也就是上面剛剛配置的php fastcgi均衡器的名字了。
完了以后,重啟nginx即可