今天一早起来,发现linode上所有的网站都不能访问,现实502 Bad Gateway。首先想到重启linode,重启之后好了一阵,又出现同样的错误。于是联系linode客服,提交了一个ticket,出乎我的意料,居然3分钟就回复了,内容如下:

Hi,

Thanks for contacting us! As an unmanaged provider, we do not have internal access to your Linode and wouldn’t be able to directly assist with this type of issue. You’ll want to take a look at your web server’s error logs; they will contain more specific error messages that should help you track down the problem.

If you have any other questions, please feel free to ask.

意思是说,他们只是一个非管理主机商,没有我的linode的权限,因此在这个问题上不能帮助我,让我自己去查看日志,解决此问题。

没办法,只好,上网去搜。搜到几篇关于502 Bad Gateway的文章,上面提到了可能的原因有六种:

第一种原因:目前lnmp一键安装包比较多的问题就是502 Bad Gateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。
解决办法:可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的。

第二种原因:
在php.ini里,eaccelerator配置项一定要放在Zend Optimizer配置之前,否则也可能引起502 Bad Gateway

第三种原因:
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。

第四种原因:
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300

第五种原因:
磁盘空间不足,如mysql日志占用大量空间

第六种原因:
查看php-cgi进程是否在运行

按照上面解决方法,改了几个主机参数,结果发现lnmp和mysql重启都不行了,这次发现所有的网站都现实数据库连接错误了,我感觉问题越来越复杂了,心想不是要我重新装一篇系统吧,想起来头都大了。

我又看了一眼 nginx 的 error.log ,发现了这么一句话:

write() to “/var/log/access.log” failed (28: No space left on device) while logging request

磁盘空间满了?马上df -h 查看,果然使用率是100%,上面提到有一种原因是mysql日志满了会导致lnmp启动失败的文章,于是到/usr/local/mysql/var/里面看日志,吓了一跳,有十几个mysql-bin.0000* 类似的文件,有些单个大小已经超过1G,立即删除了。

再访问网站,居然一切正常了。谢天谢地,终于解决了。看来问题就出现在mysql的日志上。

为了避免再次这样杯具,决定关闭mysql日志。

修改/etc/my.cnf 文件,找到

log-bin=mysql-bin
binlog_format=mixed

再这两行前面加上#,将其注释掉(大概在第49行和第56行),再执行/etc/init.d/mysql restart即可。