php 莫名502問題的解決辦法

本文針對PHP ver 5.3.6 or Higher,其它未測試過。 php

1. 使用不一樣端口或sock啓動多個php-fpm主進程 nginx

假設使用不一樣配置文件啓動3個使用sock的php-fpm主進程 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個主進程的 spa

2. 修改Nginx的配置文件以使用進程池模式 線程

在nginx.conf的http段根據實際php-fpm進程狀況增長代碼: unix

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;

這樣咱們就創建了一個能夠根據健康情況輪詢並能夠重試的資源池。 code

3. 而後呢? server

在須要執行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就能夠正常執行php,也就是說,若是有的異常退出了,基本也不影響網站運行。 步驟2中fastcgi_next_upstream那行的參數,不須要加http_502,實際你也加不上去的,不支持。 步驟3中,原有的每段相似這種location ~ \.php$ {代碼都須要對fastcgi_pass這行根據示例改造。 步驟1中的.conf配置文件,每一個主線程的children,根據內存狀況設置2~n個,聽說越多越好,可是內存越用越多。 通過本方案的調整,請注意,你原有的所謂service php-fpm和502監控腳本之類的東西,都須要從新修改,若是你還想用。固然,對技術宅來講,若是操做本方案那是運用自如,消化吸取。

相關文章
相關標籤/搜索