
nginx 503错误(Service Temporarily Unavailable 服务暂时不可用): 503是一种HTTP状态码,由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
一般来说,出现503错误多半是因为网站访问量大,造成了流量超限或者并发数大引起的资源超限出现的错误。
解决的方法一个是升级空间到更佳配置,要么就是检查网站系统程序,使之更佳优化。
解决方法:
1、尝试将超请求执行时间加大一点,如:
proxy_connect_timeout 360s;
proxy_send_timeout 360s;
proxy_read_timeout 360s;
fastcgi_connect_timeout 360s;
fastcgi_read_timeout 360s;
fastcgi_send_timeout 360s;
(补充一点,用户浏览器通常超过60s就会报超时了)
2、如果你自认为自己的网站程序没有问题,那么就应该是空间有过多的限制造成了系统资源不足引起的错误,可以考虑换空间了。
3、如果空间没有问题,那么就要仔细检查网站程序是否有死循环或者内存泄露等问题。
终极解决方法 Shell!
尝试模拟用户的外部请求 , 如果请求结果出现503状态码 , 则重启nginx服务器 , 详细代码如下:
#定时执行以下代码 , 频率自行决定
#* * * * * sh /root/check_nginx_alive.sh > /dev/null 2>&1
#!/bin/bash
function CheckUrl() {
timeout=5
fails=0
success=0
while true
do
#检测进程是否宕机
A=`ps -C nginx --no-header | wc -l`
if [ $A -lt 3 ];then
echo $(date +%F%n%T) "nginx未启动,启动nginx..."
systemctl restart nginx
sleep 10
exit 0
else
echo $(date +%F%n%T) "nginx正在运行..."
fi
#检测外网请求是否超时 use wget to CheckUrl can be used
#源地址
url0=https://your-host/static/images/alive.txt
#代理地址
url1=https://your-source-host/static/images/alive.txt
wget --timeout=10 --tries=1 $url1 -U 'Mozilla/5.0 (linux) AppleWebKit/605.1.15 Safari/605.1.15' -q -O /dev/null
#Shell脚本中,判断一个基本命令执行是否成功 $?表示,执行成功的返回码是0
if [ $? -eq 0 ];then
#-eq:等于号, 上一命令执行成功时的操作
echo "Success! 状态码:$? 代理地址 请求成功:$url1"
exit 0
else
#上一命令执行失败时的操作
echo "Fail!: 状态码:$? 代理地址 请求失败:$url1"
#尝试请求源地址
echo "尝试请求源地址:"
wget --timeout=3 --tries=1 $url0 -U 'Mozilla/5.0 (linux) AppleWebKit/605.1.15 Safari/605.1.15' -q -O /dev/null
if [ $? -eq 0 ];then
echo "Success! 源地址 请求成功:$url0"
echo "准备重启Nginx"
systemctl restart nginx
sleep 10
exit 0
else
echo "Fail! 源地址 请求失败:$url0"
echo "发送邮件到管理员~~~~~~~"
#发件模块请自行编写
exit 0
fi
exit 0
fi
exit 0
done
}
CheckUrl
每隔一段时间执行以上代码 , 如果wget执行失败 , 则说明服务器出现问题 , 上文中(/static/images/alive.txt)的请求文件请自行设置 , 请求文件的大小尽量设置为0kb , 主要目的是为了节省带宽流量和加快响应。
wget的设置参数可以参考这篇文章:wget请求参数和详细设置