05 代理缓存

Buffering中间件可以控制在将请求发送到服务之前如何读取请求。

使用Buffering,Traefik将整个请求读入内存(可能将大请求缓冲到磁盘),并拒绝超过指定限制的请求。

这可以帮助服务处理大数据(例如,multipart/form-data),并可以最大程度地减少将数据发送到服务所花费的时间。

配置选项

maxRequestBodyBytes

maxRequestBodyBytes选项,可以配置请求的最大允许body大小(以字节为单位)。

如果请求超出允许的大小,则不会将其转发到服务,并且客户端会收到413(请求实体太大)响应。

# Sets the maximum request body to 2Mb
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    maxRequestBodyBytes: 2000000

memRequestBodyBytes

使用memRequestBodyBytes选项配置一个阈值(以字节为单位),超过该阈值将请求缓存到磁盘上而不是内存中。

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    memRequestBodyBytes: 2000000

maxResponseBodyBytes

使用maxResponseBodyBytes选项,可以配置服务允许的最大响应大小(以字节为单位)。

如果响应超过允许的大小,则不会转发给客户端。客户端改为收到413(请求实体太大)响应。

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    maxResponseBodyBytes: 2000000

memResponseBodyBytes

使用memResponseBodyBytes选项配置一个阈值(以字节为单位),超过该阈值将响应缓存在磁盘上而不是内存中。

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    memResponseBodyBytes: 2000000

retryExpression

使用retryExpression选项的使Buffering中间件重试请求。

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    retryExpression: "IsNetworkError() && Attempts() < 2"

重试表达式定义为以与运算符AND(&&&)和OR(||)的逻辑组合。至少需要一个功能:

  • Attempts() 尝试次数(第一个计数)
  • ResponseCode() 服务的响应码
  • IsNetworkError() 如果响应代码与网络错误有关
上次修改: 22 August 2020