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

Traefik v2.9.6缓冲中间件未返回HTTP 413,如何替换响应?

问题解决:Traefik缓冲中间件触发限制时返回连接重置而非413响应

问题原因

当Traefik的buffering中间件检测到请求体超过maxRequestBodyBytes限制时,如果客户端仍在持续发送数据,Traefik默认会直接关闭TCP连接,导致客户端收到"Connection reset by peer"错误,而非预期的HTTP 413响应。这是因为Traefik未在内存中缓冲足够的请求体数据,无法在断开连接前完成HTTP响应的发送。

解决方案

1. 调整缓冲中间件配置,添加内存缓冲参数

修改request-limits中间件,增加memRequestBodyBytes参数,设置为与maxRequestBodyBytes相同的值(或合理的内存缓冲阈值),让Traefik先将请求体缓冲到内存中,这样在检测到大小超限后,能正常发送413响应再关闭连接:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: request-limits
spec:
  buffering:
    maxRequestBodyBytes: 10485760
    memRequestBodyBytes: 10485760  # 配置内存缓冲上限,与请求体限制一致

2. 优化Entrypoint超时配置

确保Traefik的websecure入口点有足够的超时时间,让Traefik能完成413响应的发送:

在Traefik的ConfigMap配置中添加:

entryPoints:
  websecure:
    http:
      timeout:
        requestTimeout: 30s

3. 分块编码请求的额外处理

如果客户端使用分块编码传输请求体,Traefik无法提前预知总大小,会在接收过程中检测超限。此时上述配置仍能生效,Traefik会在检测到超限后立即发送413响应,而非直接重置连接。

验证

更新中间件和Traefik配置后,重新发送超过10MiB的请求,此时应收到标准的HTTP 413 "Payload Too Large"响应,而非连接重置错误。

内容的提问来源于stack exchange,提问作者Theo Sweeny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:15:33