最近老王有一台腾讯云服务器在备份数据时就会出现网站打不开的情况,直接返回 Nginx 502 Bad Gateway,本文分享下 Nginx 502 错误的可能原因,以及本次错误的解决过程。
一、Nginx 502 问题原因
5xx 一般是表示服务器错误的状态码,而 Nginx 502 Bad Gateway 错误表示访问请求的 php-cgi 进程已经开始执行,但是由于读取资源失败等原因没有执行完毕,导致 php-cgi 进程终止。
导致 Nginx 502 Bad Gateway 错误的可能原因一般有以下几个:
- php-cgi 进程数不够
- PHP 执行超时
- php-cgi 进程异常中断
- 带宽不够
- 磁盘不够
二、Nginx 502 问题解决
之前老王好像遇到过这个问题,是由于备份数据时 rsync 进程直接占满了带宽,所以后来老王在备份脚本中限制了 rsync 的最大带宽:《rsync 限制传输速度最大值教程》,我去腾讯云后台看了下备份时的公网带宽使用情况,确实只用了一半的总带宽,应该不存在带宽不够的情况。
腾讯云后台同样记录了 CPU 占用情况,数据显示备份时最高也没有超过 30%,所以应该不存在资源不够用的情况。
因为这个问题是最近才出现的,而老王一直没有动这个备份脚本,所以我以为是腾讯云服务器哪里出了问题,于是直接联系腾讯云售后,这里还是得夸一下腾讯云的售后服务,大概 2-3 分钟就回复我了,后来又把我转接到专门负责计算一块的技术人员那里,大概 5 分钟左右就指出“你的磁盘似乎满了”。老王连上服务器一看,果然用了 96%,用磁盘检查命令(《记录几个分析 Linux 磁盘空间与使用情况的常用命令》)排查了下,是 ThinkPHP 生成的日志文件太多了,于是删了日志文件,留出磁盘空间,Nginx 502 Bad Gateway 问题随之解决。