将PHP从5.3.28升级到5.3.29时Nginx出现502错误


Posted in PHP onMay 09, 2015

今天将PHP从5.3.28升级到5.3.29,发现网站打不开了,提示”502 bad gateway”,访问静态资源可以,但访问任何PHP文件都会502。
其实之前也发现这个问题,只是一直没找到解决办法,所以我一直将PHP保持在5.3.28版本。
按照我以前的脾气,我什么软件都得要最新的稳定版,但PHP之类的软件是例外,因为版本高了,会导致很多程序不兼容,相对来说5.3兼容性算是最好的版本之一,当然5.2也可以。
强迫症实在受不了,官方说5.3.29是5.3的最后一个版本,最后一个版本出现这种问题又一直没解决让我很难受。
网上搜索了一下,没人出现我这种问题,所有的编译过程,配置过程,都是照旧,之前从5.3.25一直到5.3.28都是用的我写的同一个升级脚本,按道理同一个子版本系列,一样的编译和配置过程,不应该出现问题的。
为何5.3.25一直到5.3.28都没问题,到了5.3.29就没问题了呢?
今天终于把问题的根源找到了,我也是醉了……
由于我不想占用额外的端口,所以Nginx和PHP-FPM之间一直使用的Unix socket,而且据说这种方式效率也高一些。
PHP升级到5.3.29以后,出现502错误,而且是一打开网页就报错了,不像是由于PHP执行超时导致的Nginx提示502,更像是PHP-FPM异常终止了,或者是Ngxin根本没有连接上fastcgi。
使用PHP-FPM的日志也是郁闷,我明明开启了日志,还设置了日志路径,但还是没有生成日志。

好吧,根据前面的思路推测出来的原因找问题:

1.PHP-FPM一开始工作就异常终止了;
2.Ngxin根本没有连接上fastcgi。

第一种可能直接就排除了,因为出现502错误的时候,后台的PHP-FPM进程并没有退出,还存活得好好的。
那么很可能是第二种可能了,我把Nginx和PHP-FPM的配置文件修改了一下,改成了传统的“地址:端口”的形式

PHP-FPM配置文件中:

listen = 127.0.0.1:1234

Nginx配置文件中:

fastcgi_pass 127.0.0.1:1234

重启服务,网站竟然顺利打开了。

看来就是Nginx没有连接上PHP-FPM了,那么问题出在哪里呢?难道5.3.29去掉了Unix socket的连接方式?我觉得不大可能,查阅更新日志,也没有看到有关的项目啊。

我将Nginx和PHP-FPM的配置文件改回去。
PHP-FPM配置文件中:
listen = /tmp/php-cgi.sock
Nginx配置文件中:
fastcgi_pass unix:/tmp/php-cgi.sock;
重启服务,立马又502了。

首先想到了检查权限,反正是测试,所以我二话不说直接把那个PHP-FPM的sock文件权限改为777。
chmod 777 /tmp/php-cgi.sock
直接打开网页,能打开!

好吧,就是权限问题了,重启服务,查看php-cgi.sock 的权限

-rwx------. 1 root root 663 9月 18 00:16 php-cgi.sock
这。。。原因已经很明了了,怪不得Nginx连不上PHP-FPM,php-cgi.sock的权限竟然是700,
但问题来了,为什么同样的编译和配置过程,5.3.28之前的版本就没问题呢?我查看另一台没有升级5.3.29的服务器:
srw-rw-rw- 1 root root 0 9月 16 21:11 php-cgi.sock
发现其权限是666,这……无法理解了……为什么5.3.28的默认权限配置是666,到了5.3.29就变成700了呢?
查阅PHP文档,找到解决办法

将PHP-FPM里的配置文件加入,前两项是指定php-cgi.sock的拥有者和用户组,后一项是指定文件权限。
listen.owner = www
listen.group = www
listen.mode = 0666
重启服务,问题解决。

PHP 相关文章推荐
PHP ajax 分页类代码
Nov 13 PHP
php中日期加减法运算实现代码
Dec 08 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
PHP 中常量的知识整理
Apr 14 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 #PHP
php中header跳转使用include包含解决参数丢失问题
May 08 #PHP
PHP中is_file()函数使用指南
May 08 #PHP
PHP5.2下preg_replace函数的问题
May 08 #PHP
PHP中is_dir()函数使用指南
May 08 #PHP
php中file_exists函数使用详解
May 08 #PHP
PHP时间和日期函数详解
May 08 #PHP
You might like
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
pw的一个放后门的方法分析
2007/10/08 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
利用JS实现数字增长
2016/07/28 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
Python中字符串的修改及传参详解
2016/11/30 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
谈谈python中GUI的选择
2018/03/01 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python3.4解释器用法简单示例
2019/03/22 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
各营销点岗位职责范本
2014/03/05 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
党建工作经验交流材料
2014/05/25 职场文书
社保转移委托书范本
2014/10/08 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
初中体育课教学反思
2016/02/16 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS