NGINX 502 Bad Gateway错误处理的一个方法记录

NGINX 502 Bad Gateway错误以前遇到过,不过不是常发生,所以也没什么注意,不过今天在网上看到一个方法错误处理方法,觉得很好,于是记录下来,留待以后备用,或者有机会实践下。

记录:

一般nginx搭配php都采用这样的方式:

location ~ \.php$ {
proxy_pass http://localhost:9000;
fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_script_name;
include fastcgi_params;
}

这个方式只能连接到一组spawn-fcgi开启的fastcgi,在服务器负载稍高时常常出现502 bad gateway错误。

起先怀疑这是php-cgi的进程开得太少,增加后仍然有反映时常有错,偶然间发现php-cgi会报出这样的错误:

zend_mm_heap corrupted

看来是php-cgi在执行某些代码时有问题,以致于该线程中止。

在服务器上可能还会看到php-cgi进程在不断变少,估计是出现错误的php-cgi的进程自动退出了。

php的问题总是不太容易能解决,所以在nginx方面想想办法,nginx的好处是它总是能爆出一些稀奇古怪的做法出来。

在nginx的proxy中,规避莫名其妙错误的办法无非是proxy到一个upstream的服务器组中,然后配置proxy_next_upstream,让nginx遇到某种错误码时,自动跳到下一个后端上。这样,应用服务器即使不稳定,但是在nginx后面就变成了稳定服务。想到nginx的fastcgi和proxy是一路东西,所以proxy能用的经验,移植到fastcgi也能跑得起来。

照着这个思路,用spawn-fcgi多开同样一组php进程,所不同的仅仅是端口:

spawn-fcgi -a 127.0.0.1 -p 9000 -u nobody -f php-cgi -C 100
spawn-fcgi -a 127.0.0.1 -p 9001 -u nobody -f php-cgi -C 100

然后把fastcgi的这段配置改成用upstream的方式:

upstream backend {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}

location ~ \.php$ {
fastcgi_pass backend;
fastcgi_param SCRIPT_FILENAME /data/_hongdou$fastcgi_script_name;
include fastcgi_params;
}

检查配置结果正确,能跑起来;同时在服务器上netstat -n|grep 9000和grep 9001都有记录,证明连接无误;在前台查阅页面,一切运行正常。

这个配置是最简单的配置,既然能连接上upstream,那么很显然upstream的一些东西都可以拿来用,比如ip_hash、weight、max_fails等。

这样的配置在单机下不知能不能共享session,没有测试,如果有问题,可以加上ip_hash,或者配置php把session存进memcached中。

然后就是fastcgi_next_upstream的配置,nginx wiki中没有介绍到这个配置,查了一下,在nginx的CHANGES中有提到,而且出生年月是和proxy_next_upstream一样的。既然如此,那就照proxy_next_upstream一样配吧。一般按默认的值error timeout就可以工作,因为php出现502错误的异常是返回的500错误,所以我把fastcgi_next_upstream定为:

fastcgi_next_upstream error timeout invalid_header http_500;

通过这个配置,就可以基本杜绝任何时常性的500错误,出问题的几率会变小很多,如果客户反映仍然激烈,那么就多增加几组fastcgi进程。

以上配置能够杜绝由于php所引起的“莫名其妙”的时常性的502错误,同时可使nginx搭配php比从前方式更为强悍。假如nginx还是返回502错误,那这次就一定是出现服务器挂掉或其它严重问题的了。

不看不知道啊,原来NGINX 502 Bad Gateway错误处理还可以这样啊!
好久没去搞技术了,发觉技术的东西进步得真快啊!!!

发表在 nginx | 标签为 , , | 一条评论

今日大盘指数继续再跌,无奈啊!

其实我现在只剩下000488晨鸣纸业了,还有一半资金,今日大盘指数继续再跌,无奈啊!很想砍掉000488晨鸣纸业,均线已成空头排列了,剩下的日子应该是磨人的下跌,个人估计要跌到明年1月,大概是2400~2500点是底吧!等大盘均线再成多头的排列才考虑大举进攻,现在开始无聊的等待了!

跌吧!大盘指数继续跌吧!等待下个循环的开始!

发表在 股票生活 | 标签为 , , | 留下评论

最近在淘宝网买了好多东西,记录下先

最近在淘宝网买了很多东西,够腐败啊!

买了一部号称400mw的2700hg的 adsl猫 + 路由 + 无线ap 的洋垃圾, 不过这东西经试过后,证实比国产tplink和dlink好,当然是指无线的那部分!

也买了一张usb的带5db天线的无线网卡, 芯片是8187, 性能一流!

买了一块太阳能电池!居然在自己的城市有得买,居然不知道,通过淘宝才知,是号称5w, 短路电流200ma, 在正午的时候,阳光直照,刚刚能推动一部12v的130ma的电脑小风扇,不过没什么力度的!

不来再想腐败一部号称625倍的天文望远镜的,但我这边城市光污染太厉害了,还是放弃了!

由于自己的数码相机坏了,哎,不能一一照上图片放上来!有时间过朋友家那部数码相机照些照片放上来!

发表在 一般生活 | 标签为 , , , , , , , , , | 留下评论

2009年8月16日,上证指数又是精彩暴跌的演出

心寒的演出,我的000488晨鸣纸业在8个交易日跌了23%,精彩无论啊,当然这不是个股演出了,上证指数同时也精彩的表演了暴跌,大盘跳水有如我们国家跳水队的一样,跳得同样出色,散户们对这次的跳水暴跌给予高度评价!血的评价!

同样我也是了,虽然逃脱了一半的资金,但一半的资金给000488晨鸣纸业的·暴跌吞没了23%,哎,其实我知道大盘是M顶的,但不够狠心全砍仓,只砍了一半,好了,居然给000488晨鸣纸业砍了23%了,悲哀啊…

希望有机会来个反弹少许,给我砍仓砍得好点吧!

发表在 股票生活 | 标签为 | 留下评论

中山山顶花园烂尾楼爆破了,爆破前我照了一些照片

中山山顶花园烂尾楼爆破了,不过我12号那天下午和朋友开着摩托车沿着中山山顶花园烂尾楼周围跑了一圈,一边照相片,这栋中山山顶花园烂尾楼算是个纪念物吧!毕竟由1994建成到现在算死不少时间了,这么多年算经过N次,当个纪念吧!至于为什么烂尾,这个不用说了吧!

顺便也无聊的拍了一些花花草草,这中山山顶花园烂尾楼周围的!

以下图片:
继续阅读

发表在 一般生活 | 标签为 , | 留下评论

昨天在中山市石岐帝涛湾小区游水

昨天横风横雨,不过我跑了去中山市石岐帝涛湾小区游水,这次才知道小区里边有个算是不错的游泳池,不过全哥游泳池只得1.3米深,我3点多钟到的,居然没人啊,只得一对父女和救生员在!

衣服的保管可以自己放在池边,也可以租用一个柜子放衣服,只用交压金,不用收钱。

泳着泳着时居然横风横雨,过瘾啊…O(∩_∩)O哈哈~…好久未试过这样天气游水了!

下次有时间继续来这边,其实我好想到逍遥谷去的,可惜太远了…

发表在 一般生活 | 标签为 , | 3条评论