本文将介绍如何根据应答中返回的errorMessage来排查常见的D504CO。
1、Backend service connect failed `Timeout connecting to 172.X.X.1:80`
问题原因:API网关和后端服务建立连接超时导致的后端连接失败。
解决方案:
需要检查您录入的后端服务地址是否正确;
如果后端服务在 ECS ,请检查安全组设置,是否可以被外部访问。请保证安全组可以被API网关的出口IP段访问。
排查后端服务是否有黑白名单、后端服务应用程序是否启动、及防火墙是否有拦截;
若后端是VPC类型,链路涉及到跨Region或是通过云企业网访问的IDC机房,则需要配置回程路由,文档可以参考访问云服务。
2、Backend service connect failed `Connection is closed`
问题原因:后端服务主动发FIN包关闭连接导致的后端连接失败。
解决方案:网关在2023年8月对这种场景做了兼容,增加了重试功能,也就是网关收到后端返回的FIN包后会重试一次。若您是2023年8月前购买的专享实例,出现这个报错后可以工单联系我们给您升级实例版本。
3、Backend service connect failed `Connection refused`
问题原因:后端服务拒绝了API网关的连接导致的后端连接失败。
解决方案:需要用户自行排查后端服务拒绝网关连接的原因。
4、Backend service connect failed `Connection lease request time out`
问题原因:API网关实例后端连接池不够用导致的后端连接失败。
解决方案:升级API网关实例。关于实例的选择可以参考实例类型与选择指南。
基于HTTP协议的特性,同一个长连接上数据是串行传输的,请求方发送完第一个请求后必须等到应答后才能发第二个请求。API网关最大出访连接池大小可以按照这个原则来估算连接池是否够用:
出访连接池是指API网关到后端服务的连接池,若购买的专享实例规格为api.s1.small,最大出访连接池大小为1200,如果后端服务每个请求的应答时间在1秒时,那么这个实例最大支持的出访RPS是1200,超过1200后,如果请求进入API网关,后端连接池被占满,API网关会让请求进入一个等待队列,等待500毫秒后如果仍然拿不到连接资源,就会给客户端返回Backend service connect failed `Connection lease request time out`。