應用的最前端是一台nginx伺服器,所有靜態內容都由nginx來處理,而將所有php的請求都分攤到下遊的若干台運行php fastcgi守護進程的伺服器中,這樣可以以一種廉價的方案來實現對系統負載的分攤,擴充系統的負載能力。
三台php fastcgi伺服器的ip地址分別為:
172.16.236.110 , 172.16.236.111, 172.16.236.112
運行php fastcgi進程時,需要讓php-cgi監聽到伺服器的區域網路地址(分別如上所示),而不是之前一般都是監聽的本地地址(127.0.0.1)。以172.16.236.110這台伺服器為例:
/usr/local/php5/bin/php-cgi -b 172.16.236.110:9000
或許你用spawn-fcgi來啟動php-fcgi,那麼就是這樣(供參考,其實也就是修改監聽的地址和連接埠即可):
/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
找到這個配置項(其中的地址可能需要根據你自己環境來調整)
<value name="listen_address">127.0.0.1:9000</value>
修改為:
<value name="listen_address">172.16.236.110:9000</value>
修改完畢後,重啟你的php-fpm進程。
然後按照上面的步驟,依次修改其他php fastcgi伺服器。
php方面的工作暫時就是這些,下面修改nginx。
vi /usr/local/nginx/conf/nginx.conf
在設定檔的http段內增加類似如下的配置:
upstream myfastcgi {
server 172.16.236.110 weight=1;
server 172.16.236.111 weight=1;
server 172.16.236.112 weight=1;
}
我這裡三台php fastcgi伺服器的權重是相同的,所以其中的weight值都是1,如果你的php fastcgi伺服器需要分主次,那麼可以通過調整其weight值來達到目的。比如以第一台伺服器為主,其他兩台為輔,則就是這樣:
upstream myfastcgi {
server 172.16.236.110 weight=1;
server 172.16.236.111 weight=2;
server 172.16.236.112 weight=2;
}
然後找到原來nginx關於php fastcgi配置的部分,比如:
location ~ \\.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass myfastcgi;
#或者可以反向 Proxy到 proxy_pass http://myphpcgi
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即可。