You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang API服务遇504网关超时:浏览器/curl调用异常求助

问题分析与解答

核心结论

这个60秒的HTTP 504超时既不是Go服务器的默认属性导致,也不是Ubuntu系统的默认设置导致,问题出在你前端的负载均衡器上。

具体分析

  • 排除Go服务器原因:Go标准库的http.ListenAndServe默认没有设置ReadTimeout和WriteTimeout,服务器不会主动切断未完成的请求。你提到分析逻辑在独立goroutine中执行,服务器会持续等待结果返回,这也符合Go HTTP服务器的行为,所以Go端不是问题根源。
  • 排除Ubuntu系统设置原因:Ubuntu默认没有针对HTTP请求的全局60秒超时限制,而且你用Go代码直接调用服务能正常等待,说明系统层面没有对请求时长做限制。
  • 确定负载均衡器问题:几乎所有主流负载均衡器(如Nginx、AWS ALB、HAProxy等)都默认配置了60秒左右的后端响应超时。当负载均衡器等待后端服务返回结果超过这个时间,就会直接给客户端返回504网关超时,而后端的Go服务仍会继续执行分析逻辑,这完全符合你描述的现象。

验证与解决方法

  1. 验证方法:绕过负载均衡器,直接在本地或服务器内部用curl调用Go服务的80端口(比如curl http://localhost:80/getresults?inputdata=data),观察是否还会出现60秒超时。如果能正常等待到结果返回,就可以100%确认是负载均衡器的超时配置问题。
  2. 解决方法:
    • 修改负载均衡器的超时设置,将后端响应超时时间调整为业务需要的时长(比如5分钟),具体操作参考你使用的负载均衡器官方文档。
    • 针对客户端:如果用curl调用,需要加上--max-time参数设置足够长的超时(比如curl --max-time 300 https://example.com/getresults?inputdata=data);浏览器默认的超时时间可能也需要调整,或者考虑改用异步请求方式(比如轮询结果接口)来适配长耗时业务。

内容的提问来源于stack exchange,提问作者Silver Bullet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:17:03