Golang单主机反向代理HTTP超时配置问题求助
解决Go单主机反向代理30秒超时问题
你的代码核心问题在于克隆了自定义Transport但未将其绑定到反向代理实例,导致代理依然使用默认的http.Transport配置,而默认配置隐含了30秒级别的超时限制。
修正后的代码
timeout := service.httpConfig.ProxyTimeout / 1000 proxy := httputil.NewSingleHostReverseProxy(clusterURL) // 克隆默认Transport并修改超时配置 transport := http.DefaultTransport.(*http.Transport).Clone() // 设置等待响应头的超时时间 transport.ResponseHeaderTimeout = time.Duration(timeout) * time.Second // 将自定义Transport绑定到代理,这一步是关键 proxy.Transport = transport proxy.ServeHTTP(c.Writer, c.Request)
关键配置说明
ResponseHeaderTimeout:限制从发送请求到接收到下游服务响应头的时间,针对下游服务挂起不返回响应头的场景生效。- 若需要严格控制整个请求的生命周期(从连接建立到响应体接收完成),可额外搭配
http.Client的全局超时:client := &http.Client{ Transport: transport, Timeout: time.Duration(timeout) * time.Second, // 整体请求超时 } proxy.Transport = client.Transport
额外注意事项
如果下游服务涉及长连接场景,建议同时检查IdleConnTimeout、MaxIdleConnsPerHost等参数,避免连接过早被回收引发的超时问题。
内容的提问来源于stack exchange,提问作者Varun Gupta
相关产品推荐
相关产品推荐

