php memcache返回502,解决Nginx+Memcache下出现502错误的问题

使用Nginx+Memcache模块(HttpMemcachedModule或NginxHttpMemcModule)进行加速静态内容真是无敌的选择!

在Memcache模块正常运行的情况下,Nginx可以直接从Memcache内存中读取内容并直接显示,根本占用不硬盘IO,飞快得很!

但是,有时候Memcache却会因故或无故地停止运行了!这时候Nginx将会抛出502错误信息,很烦人。解决这个问题基本也不难。原理就是使用Nginx的error_page 502转向技术。当出现这个错误的时候,把502错误转向一个@目的来处理。

我们一般使用Nginx+Memcache的时候会使用

error_page 404 = @view404;

来处理当Nginx从Memcached内存中取不到内容时,而转向实际内容的处理程序(可以是php或直接读硬盘中的内容)。如何使用Nginx+Memcache加速网页,可以查看我之前写的文章。

那么不难理解,当502出现时,我们可以使用这个技术来处理502问题。那就是转向一个不使用Memcache的PHP程序或者直接改为从硬盘读取,我贴一下正在使用的样例(我是使用国人修改HttpMemcachedModule的NginxHttpMemcModule模块,功能更丰富,标准版的HttpMemcachedModule模块同理):

PHP方法:

说明一下:

^/app_(\d+)\.html是一个伪静态规则,其实指向一个PHP程序:viewapp.php

在这个PHP程序中,只有当$_REQUEST['k']有值时才会读写Memcache。一般情况下,K是有值的。而当Nginx出现502时,也就是当Memcached停止运行后,Nginx检测到这个错误并转发给  error_page 502 = @view502; 接着@view502又rewrite重定向给view.php,此时,只是传递ID,而没有k,所以PHP程序不会处理Memecached的运行情况,只会接一般的程序来处理。好了,要的就是这个结果,在没有Memcached运行的下依然能使网站正常运行,当你把Memcached处理好了,启动Memcached后,网站又自动启用Memcached了!

好了,以后不用因为502烦恼了!0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值