[转]Nginx 502 PHP LNMP 502 终极解决方案 完美解决502 用 upstream 和 fastcgi_next_upstream 可以极大缓解

转: 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 可以极大缓解

时间: 2024-12-21 19:15:41

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

Android—大图or多图加载解决方案(完美解决OOM问题)

在开发应用的时候,很多时候都会涉及大量图片的加载和高精度图片的加载,这两种操作都是会导致应用程序OOM(OutOfMemory)的问题发生,合理的图片加载和图片内存管理就是必须解决的问题,以下将提供一个比较完善的技术方案,解决这两个问题. 首先,我们必须明确为什么会发生OOM(OutOfMemory)的问题,其原因就是因为在APP运行过程中,所使用的系统内存超出了当前APP的最大可用内存,就发生了OOM的问题.下面,我们来估算一下在一台中高档的手机上面,加载多少图片会导致OOM:假设系统分配给A

linux下nginx,mysql,php(lnmp)编译安装

关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq!  #保存退出 setenforce 0 #使配置立即生效 mysql 5.5.28安装 安装路径:/usr/local/mysql数据库路径:/usr/local/mysql/data/ mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具

Android OOM问题终极解决方案

大家在安卓开发的过程中使用Bitmap,尤其是当程序中包含大量图片的时候或多或少会遇到OOM(Bitmap: Out Of Memory),遇到这个问题是非常痛苦的,在这里给大家分享一下我自己结合网络上寻找的各种方案,以及自己的研究总结出来的解决方案. 首先大家要知道OOM为什么会出现,通过上网查资料明白了是由于使用了 BitmapFactory.decodeFile(filePath) 这个方法导致的,这个方法通过Google提供的sdk看代码是将整个文件直接读取的所以占用资源比较大,所以找到

[原创] Android 自定义AlertDialog 去黑边终极解决方案(亲测有效!)

问题:自定义AlertDialog出现黑边 运行代码段: View view = View.inflate(context, R.layout.dialog_common, null); mDialog = new AlertDialog.Builder(context).create(); mDialog.setView(view); mDialog.show(); dialog_common.xml <?xml version="1.0" encoding="utf

物联网建设中通讯互联层的终极解决方案

1.自我介绍 本人已经工作10年,一直在工业领域.在一线干过实施,下过矿井:干过项目,带过团队:干过软件研发,出过产品:干过项目群管理,售前和市场也接触过:期间在纯软件公司也干过将近两年的时间,熟悉软件开发流程与管理.虽然没有取得多大成绩,也算经历丰富了. 互联网“行业”如火如荼的发展,曾经也想过转行去做“互联网”,奈何犹豫太久,已然提不起太多兴趣.凭借当年的沉淀与积累,有个半成品的框架,在工作索然无味的情况下,毫不犹豫的投身到物联网框架的开发与产品化的进程中.别人都说物联网的时代来了,如果真的

vim、gvim在windows下中文乱码的终极解决方案

测试成功,完美解决. 只需修改VIM目录下面的这个文件_vimrc. 加油吧,骚年.很强大的! set encoding=utf-8 set fileencodings=utf-8,chinese,latin-1 if has("win32") set fileencoding=chinese else set fileencoding=utf-8 endif "解决菜单乱码 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/

android软键盘弹出引起的各种不适终极解决方案

很多写登录界面的开发者都会遇到一个问题:那就是在登录界面时,当你点击输入框时,下边的按钮有时会被输入框挡住,这个不利于用户的体验,所以很多人希望软键盘弹出时,也能把按钮挤上去.很多开发者想要监听键盘的状态,这无疑是一个很麻烦的做法. 我们可以在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点

JSP中文乱码问题终极解决方案(下)

摘要: 本文首先从四个方面给出了在使用JSP过程中可能出现中文乱码的情形,具体包括JSP页面中文乱码.JSP源文件中文乱码.GET 请求的请求参数为中文乱码 和 POST 请求的请求参数为中文乱码四种情形,并针对每种情形给出了相应的终极解决方案. 一. JSP页面与JSP源文件乱码 在介绍JSP页面与JSP源文件的乱码问题前,首先我们必须对JSP页面中文乱码问题与JSP源文件中文乱码问题有一个清晰的概念,即: JSP页面中文乱码问题是指用户在浏览器看到的服务器所返回的jsp页面中,中文字符不能正

Android 自定义AlertDialog 去黑边终极解决方案(亲测有效!)

问题:自定义AlertDialog出现黑边 运行代码段: View view = View.inflate(context, R.layout.dialog_common, null); mDialog = new AlertDialog.Builder(context).create(); mDialog.setView(view); mDialog.show(); dialog_common.xml <?xml version="1.0" encoding="utf