将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原创论坛
Oct 09 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
php正则表达式学习笔记
Nov 13 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 PHP
PHP正则表达式之RCEService回溯
Apr 11 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
破解Session cookie的方法
2006/07/28 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
python根据出生日期获得年龄的方法
2015/03/31 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
python3跳出一个循环的实例操作
2020/08/18 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
Java面向对象面试题
2016/12/26 面试题
大学生护理专业自荐信
2013/10/03 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
先进人物事迹材料
2014/12/29 职场文书
个人委托函范文
2015/01/29 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫