Nginx 503错误总结

《Nginx 503错误总结》

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请求参数和详细设置

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注