今天一朋友来求助,在Ubuntu和Debian的LNMP环境下安装memcache后页面一直报502错误,然而在CentOS下却非常正常。起先我以为问题出在memcache上,然而在我手动telnet连接memcache之后发现memcache是正常运行的。接下來我检查了PHP-FPM的日志,里面除了一堆线程退出重启的日志以外也没有什么错误。乍一看这问题十分诡异,实际上是PHP-FPM与memcache3.0.8版本的PHP模块有点兼容问题,经过测试在Apache下就没这个问题。下面将说明下如何在军哥的lnmp一键包上解决这问题。

实际上,这问题的解决十分简单,将memcache版本降至2.2.7的Stable版本就能解决这问题,而我们使用大部分一键包安装memcache都会安装上3.0.8这个最后一个版本,然而这个版本是个beta版本。因为军哥的一键包在CentOS下默认都是使用yum来进行安装,由于CentOS的yum只会提供Stable版本的软件包,所以在CentOS上并不会遇到这个问题的原因就是如此。

然而由于军哥的一键包里写死了memcache的版本号,所以我们要手动修改军哥一键包里的脚本所使用的memcache版本号为2.2.7。打开一键包目录下的 include/version.sh 文件,将

PHPMemcache_Ver='memcache-3.0.8'

修改为:

PHPMemcache_Ver='memcache-2.2.7'

之后,我们去下载一下memcache2.2.7的源文件:

http://pecl.php.net/get/memcache-2.2.7.tgz

将这个文件上传至一键包的 src 目录下,如有memcache-3.0.8.tgz和其解压的目录,将其一并删除,只保留memcache-2.2.7.tgz。

如果我们之前已经安装过memcache的话我们得先卸载一次memcache:

./addons.sh uninstall memcached

卸载完毕了之后我们再使用以下命令重新安装一次就可以正常使用memcache了:

./addons.sh install memcached

到此为止,这问题就能完美得解决。当然我个人是觉得,都用memcache了的程序都是些上古老程序,不然正常的都用memcached了。碰上这种老程序就别lnmp跑PHP-FPM了怕是以后碰到的问题会更多,老老实实的跑lamp或者lnmpa就是了。