Buffering中间件可以控制在将请求发送到服务之前如何读取请求。
使用Buffering,Traefik将整个请求读入内存(可能将大请求缓冲到磁盘),并拒绝超过指定限制的请求。
这可以帮助服务处理大数据(例如,multipart/form-data
),并可以最大程度地减少将数据发送到服务所花费的时间。
用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
选项配置一个阈值(以字节为单位),超过该阈值将请求缓存到磁盘上而不是内存中。
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: limit
spec:
buffering:
memRequestBodyBytes: 2000000
使用maxResponseBodyBytes
选项,可以配置服务允许的最大响应大小(以字节为单位)。
如果响应超过允许的大小,则不会转发给客户端。客户端改为收到413(请求实体太大)响应。
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: limit
spec:
buffering:
maxResponseBodyBytes: 2000000
使用memResponseBodyBytes
选项配置一个阈值(以字节为单位),超过该阈值将响应缓存在磁盘上而不是内存中。
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: limit
spec:
buffering:
memResponseBodyBytes: 2000000
使用retryExpression
选项的使Buffering中间件重试请求。
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: limit
spec:
buffering:
retryExpression: "IsNetworkError() && Attempts() < 2"
重试表达式定义为以与运算符AND(&&&)和OR(||)的逻辑组合。至少需要一个功能: