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监控脚本之类的东西,都须要从新修改,若是你还想用。固然,对技术宅来讲,若是操做本方案那是运用自如,消化吸取。

相关文章
相关标签/搜索