首页 >> 编程问题收录 >> 当前文章

Nginx配置导致的503 Service Temporarily Unavailable问题

2023年09月13日 阅读量:5809

问题场景:

这两天由于服务器被人用脚本疯狂请求网站之后,导致网站服务器超负载,为了避免这种攻击我将Nginx配置了单个IP的并发限制,当天还没有问题,但是第二天早上网站访问量多的时候,浏览器出现页面503 Service Temporarily Unavailable,然后我多次刷新,有时候刷新页面正常显示,有时候刷新页面出现样式未加载出来(样式错乱,因为加载css文件返回503状态)的情况,有时候刷新再次出现503 Service Temporarily Unavailable。

问题分析:

503 Service Temporarily Unavailable 的意思是服务暂时不可用,结合我上次的配置,我猜测应该是小站并发高了之后导致单个IP超过了我所配置的单个IP所允许并发数量。

至于为什么全站的并发高了之后才出现503 Service Temporarily Unavailable呢,刚刚配置单个IP并发限制我访问页面是正常的。这个原因应该是全站的访问并发高了之后服务器负载高,服务器处理不过来,所以对于单个IP请求一个页面的时候还未处理完成,再次刷新或者跳转别的页面的时候又加入的新的多次请求(包括各种静态文件的请求),所以服务器存在的请求超出了单个IP并发配置的限制,而全站并发不高的时候意味着访问量少,服务器负载低,单个IP请求的并发也相对较少,则不容易出现返回503 Service Temporarily Unavailable的情况。

解决办法:

修改nginx单个IP并发限制的配置,将单个IP并发数限制提升到20,这个数字取决于你访问一个页面最多需要走多少次nginx,一般看一次页面有多少次通过nginx的请求,包括css文件、图片文件、字体文件和js文件等等

配置后重新reload配置,就再也没有出现过页面显示 503 Service Temporarily Unavailable 的情况,当然可能是负载突然下降了的原因,还需要进一步测试,暂时先这样处理。

本次将nginx.conf配置文件的server部分配置修改:

// 单个IP并发数限制
server{
    limit_conn perip 20;
    limit_conn perserver 20;
}

2022-11-22补充:

果然,没过两天小站又遇到高并发的情况了,还是出现了503错误,所以归根结底是由于服务器处理请求较慢,导致单个IP的并发请求堆高了,超过了限制值20,所以又出现503了,所以了在基于上述的应对方案之后,还需要提高服务端处理速度,一个方案是增加计算资源,另一个方案是引入缓存机制。

第一个方案明显不考虑,现在高并发的场景只会出现在某个页面排名高的情况下,而且这种情况是偶尔出现的,并不是一直存在高并发,而且增加计算资源是要加钱升级服务器的,所以引入缓存机制可以解决,目前已经引入缓存机制,后面再也没有出现过503的状况。

当然了,这种情况出不出现还是取决于全站并发量有多高,服务器处理是否处理得过来,会不会让单个IP并发请求堆高。

本文为知行乐集原创,转载请注明出处。

觉得有用就点个赞吧 16
称:
箱:
容:
验证码:
本站累计访客数量:10994人
本站累计运行时长:250天
声明:本站部分内容属于原创,转载请注明出处,请勿作商业用途!本站少部分资源来自互联网,如果有侵犯到您的权益,请联系本站【niceliusir@qq.com】删除,谢谢合作!