SpringBoot后端(AWS EKS Ingress)长时间进程触发504网关超时求助
解决504网关超时但后端任务已完成的问题
核心原因
网关(如Nginx、K8s Ingress Controller)的超时配置短于后端任务实际执行时长,导致网关提前终止请求并返回504,但后端进程不受影响,仍能继续完成计算任务。
具体解决方案
- 调整网关超时参数
- 若使用K8s Ingress,修改Ingress资源的超时注解,设置值大于任务实际耗时(示例设为300秒):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/proxy-read-timeout: "300" nginx.ingress.kubernetes.io/proxy-send-timeout: "300" name: your-app-ingress spec: # 其他原有配置 - 若使用独立Nginx,修改
nginx.conf对应location块的超时配置:location /your-calculate-api { proxy_pass http://backend-service; proxy_read_timeout 300s; proxy_send_timeout 300s; }
- 若使用K8s Ingress,修改Ingress资源的超时注解,设置值大于任务实际耗时(示例设为300秒):
- 重构任务执行模式
- 将长耗时计算改为异步处理:前端发起请求后立即获取任务ID,后端后台执行计算,前端通过轮询或WebSocket获取最终结果
- 拆分复杂计算为多个子任务,并行执行以缩短整体耗时
- 验证配置有效性
- 修改配置后重启网关服务(K8s环境下更新Ingress资源即可自动生效)
- 重新发起测试请求,确认504错误不再触发,同时核对后端日志确保任务正常完成
额外排查方向
- 检查是否存在多层代理(如API网关、负载均衡器),这类组件也可能有独立超时设置,需同步调整
- 确认后端应用自身是否有请求超时配置,避免后端主动中断正在执行的任务
内容的提问来源于stack exchange,提问作者Muhammad Tariq
相关产品推荐
相关产品推荐

