500 - nginx如何减少5xx错误

【字号: 日期:2022-07-12浏览:32作者:雯心

问题描述

nginx前端,后端是n个docker容器,docker容器是nginx+php-fpm,已知每个容器都有可能故障,容器故障时前端会有502或者504错误,前端偶尔也会有网络延迟

目前的做法和问题

nginx前端使用tengine,并开启健康检查

假设interval设置为3s,fall为2,那么如果后端在上一次检查结束后立即挂掉,即有近6s的时间请求依然会转发到故障后端

假设timeout设置为1s,那么如果前端网络延迟,会导致瞬时全部后端都超时,直接返回502给用户。但是如果在增大timeout值,那么健康检查将没有多大意义,正常的时候后端一般50ms以内会响应,1s已经不能过滤掉高负载后端

后端docker使用tengine,开启sysguard模块

同上,在interval间隔内挂掉,仍有部分请求到达后端,如果后端负载在阈值频繁波动,那么5xx错误可能会比没有健康检查和sysguard还多

请问有什么解决办法吗?

问题解答

回答1:

不知道你的前端应用场景是怎么样的,貌似负载很高的样子,不太可能直接暴露错误给用户吧,大不了提示用户稍后再试下,这深入研究还是得看看什么技术架构,从根上找问题

回答2:

个人感觉这东西是避免不了的 负载大了就优化程序或者增大集群 该出的错误还是要出 只不过写个含糊的名字就可以了淘宝也经常系统忙 知乎没事还自己给自己服务器提问呢

相关文章: