提問三步曲: 提問先看教程/FAQ索引(wdcp,wdcp_v3,一鍵包)及搜索,會讓你更快解決問題
1 提供詳細,如系統版本,wdcp版本,軟件版本等及錯誤的詳細信息,貼上論壇或截圖發(fā)論壇
2 做過哪些操作或改動設置等
溫馨提示:信息不詳,很可能會沒人理你!論壇有教程說明的,也可能沒人理!因為,你懂的
[教程] 轉_LNMP 502 使用 upstream 和 fastcgi_next_upstream 可以極大緩解
本文針對PHP ver 5.3.6 or Higher,其它未測試過。
1. 使用不同端口或sock啟動多個php-fpm主進程
假設使用不同配置文件啟動3個使用sock的php-fpm主進程- #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.1.conf
- #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.2.conf
- #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.3.conf
復制代碼
這3個配置文件*.conf中,唯一不同的是設置pid文件和sock名字,假設為php-cgi.1.sock php-cgi.2.sock php-cgi.3.sock
那么啟動之后,就在相應目錄出現php-cgi.1.sock php-cgi.2.sock php-cgi.3.sock這3個sock,我是在默認/tmp下
如果你設置的都正常,ps auf是可以看到有3個主進程的
2. 修改Nginx的配置文件以使用進程池模式
在nginx.conf的http段根據實際php-fpm進程情況增加代碼:- upstream unix__tmp_php_cgi_sock{
- server unix:/tmp/php-cgi.1.sock;
- server unix:/tmp/php-cgi.2.sock;
- server unix:/tmp/php-cgi.3.sock;
- }
- fastcgi_next_upstream error timeout invalid_header http_503;
復制代碼
這樣我們就建立了一個可以根據健康狀況輪詢并可以重試的資源池。
3. 然后呢?
在需要執(zhí)行php程序的原來代碼中,原來代碼舉例:- location ~ \.php$ {
- include fastcgi_params;
- fastcgi_pass unix:/tmp/php-cgi.sock;
- }
復制代碼
或原來這樣- location ~ \.php$ {
- include fastcgi_params;
- fastcgi_pass 127.0.0.1:9000;
- }
復制代碼
修改新的,如下這樣即可:- location ~ \.php$ {
- include fastcgi_params;
- fastcgi_pass unix__tmp_php_cgi_sock;
- }
復制代碼
重啟Nginx,生效。
4. 注意事項
步驟1中啟動的各個php-fpm主進程,只要死不光,nginx就可以正常執(zhí)行php,也就是說,如果有的異常退出了,基本也不影響網站運行。
步驟2中fastcgi_next_upstream那行的參數,不需要加http_502,實際你也加不上去的,不支持。
步驟3中,原有的每段類似這種location ~ \.php$ {代碼都需要對fastcgi_pass這行根據示例改造。
步驟1中的.conf配置文件,每個主線程的children,根據內存情況設置2~n個,據說越多越好,但是內存越用越多。
經過本方案的調整,請注意,你原有的所謂service php-fpm和502監(jiān)控腳本之類的東西,都需要重新修改,如果你還想用。當然,對技術宅來說,如果操作本方案那是運用自如,消化吸收。 |