使用应用网关时出现503报错
问题现象
应用网关平稳运行过程中偶现503报错,且此过程中未变更网关配置。
错误码为503的具体报错信息为:upstream connect error or disconnect/reset before headers. reset reason: connection termination。
问题原因
应用网关侧的空闲连接保持时间与服务侧的不匹配。一般来说是服务侧的空闲连接保持时间比应用网关侧的时间长导致的503报错。
解决方案
- 在连接池中配置idleTimeout,确保网关的idleTimeout数值略低于服务侧的空闲连接保持时间。比如:服务的idletimeout是20s,网关设置15s即可。具体操作请参考连接池配置。
以服务侧的网络代理为Tomcat为例:
Tomcat的两个参数keepAliveTimeout和connectionTimeout配置的值都不能小于应用网关中配置的idleTimeout值,配置说明请参考Apache Tomcat 9 Configuration Reference。
配置Tomcat两个参数值,有两种场景:
- 当为独立的springboot.jar包时,在“application.properties”文件中配置。
- 当为springboot.war包时,在“server.xml”文件中配置。
- 在路由中配置重试策略,具体操作请参考配置重试策略。
重试只对幂等请求生效。比如:POST请求无法触发重试策略。