转: http://xn--ghqyhzj.com/post-21537.html

本文针对LNMP的PHP 版本ver 5.3.6 or Higher,其它未测试过。

1. 使用不同端口或php-fpm.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 (也可以设置不同的pool名字,默认都是[www])

那么启动之后,就在相应目录(一般是/tmp/)出现php-cgi.1.sock php-cgi.2.sock php-cgi.3.sock这3个sock,我是在默认的/tmp下。

如果你设置的都正常,ps auf是可以看到有3个主进程正在运行的。

2. 修改Nginx的配置文件,以使用进程池模式执行php程序

在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. 然后呢?

在需要执行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监控脚本之类的东西,都需要重新修改,如果你还想用。当然,对技术宅来说,该如何操作本方案那是运用自如,消化吸收。

[转]Nginx 502 PHP LNMP 502 终极解决方案 完美解决502 用 upstream 和 fastcgi_next_upstream 可以极大缓解的更多相关文章

  1. mysql 在 win 安装 最全攻略(附转载的乱码终极解决方案)以及解决data too long for column 'name' at row 1, 一种可能就是因为编码一致性问题.

    [博客园cnblogs笔者m-yb原创,转载请加链接,公众号aandb7, github.com/mayangbo666,QQ群927113708] https://www.cnblogs.com/m ...

  2. PHP防止sql语句注入终极解决方案(包含pdo各种操作使用实例)

    PHP防止sql语句注入终极解决方案完美解决方案就是使用拥有Prepared Statement机制(预处理sql)的PDO //先做个实验 先不用预处理sql写法<pre><?ph ...

  3. Nginx提示502和504错误的解决方案

    一.错误提示说明: Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止. Nginx 50 ...

  4. Eclipse不自动编译java文件的终极解决方案

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...

  5. 【转】JSP中文乱码问题终极解决方案

    原文地址:http://blog.csdn.net/beijiguangyong/article/details/7414247 在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的 ...

  6. Xcode-调试断点不能停在代码区终极解决方案

    转发 调试断点不能停在代码区终极解决方案:  http://mobile.51cto.com/iphone-390082.htm

  7. VIM、GVIM在WINDOWS下中文乱码的终极解决方案

    文章转自:http://www.liuhuadong.com/archives/68 vim.gvim在windows下中文乱码的终极解决方案在windows下vim的中文字体显示并不好,所以我们需要 ...

  8. Android大图片裁剪终极解决方案(上:原理分析)

    转载声明:Ryan的博客文章欢迎您的转载,但在转载的同时,请注明文章的来源出处,不胜感激! :-)  http://my.oschina.net/ryanhoo/blog/86842 约几个月前,我正 ...

  9. 【原创】CHROME 最小字体限制为12PX的终极解决方案

    CHROME 最小字体限制为12PX的终极解决方案 本文由五月雨恋提供,转载请注明出处. 相信不少做网站的用户会有这样一个问题,Chrome 默认最小字体是12px(最新版英文也有此问题),这个是 C ...

随机推荐

  1. CSS------如何让ul中的li分为两列甚至多列

    转载: http://blog.sina.com.cn/s/blog_7f13f92a0100rkfg.html 只需要复制ul和li中的style样式即可 如果需要自定义多少列,只需要修改li中的w ...

  2. Marriage is Stable HDU1522 稳定婚姻问题基础

    几对男女   给出每个人心中的优先级   进行最合理的匹配 要打印名字的话必须有一个名字数组 英文名用map 稳定婚姻问题: 每次循环遍历所有的男的 每个男的对目前未被拒绝的并且优先级最高的进行预匹配 ...

  3. CSS3利用一个div实现内圆角边框效果

    *首先要清楚的是,box-shadow的形状会随着border-radius变化.下面的例子可以证明: <!doctype html> <html lang="en&quo ...

  4. python 字典相关操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', 'age':'25', 'sex':'男' } msg = { 'user01':'Longzel ...

  5. 面向对象设计原则 单一职责原则(Single responsibility principle)

    单一职责原则(SRP:Single responsibility principle) 又称单一功能原则,面向对象的基本原则之一.它规定 一个类应该只有一个发生变化的原因. 该原则由罗伯特·C·马丁( ...

  6. hdu 4612 边双联通 ***

    题意:有N 个点,M条边,加一条边,求割边最少.(有重边) 链接:点我 先求双连通分量,缩点形成一个生成树,然后求这个的直径,割边-直径即是答案 #pragma comment(linker, &qu ...

  7. MAC下安装Brew[转]

    MAC下安装Brew 1.安装XCode xcode-select --install 2.安装HomeBrew ruby -e "$(curl -fsSL https://raw.gith ...

  8. java:线上问题排查常用手段

    一.jmap找出占用内存较大的实例 先给个示例代码: import java.util.ArrayList; import java.util.List; import java.util.concu ...

  9. indy10的idhttpServer应答字符串

    indy10的idhttpServer应答字符串 先看应答字符串的代码: procedure TIdIOHandler.Write(const AOut: string; AByteEncoding: ...

  10. 【jvm】java查看内存使用jmap,jstat和jstack使用 ,docker启动服务下查看jvm使用情况

    [声明,如果是docker启动的服务,可以在进入容器内后,再使用如下命令操作] [docker exec -it 容器ID  /bin/bash     即可进入容器内] [如果不是docker启动的 ...