场景:DataEase V2 运行着,正常使用,突然报错提示 413 错误
背景:没有安装 nginx ,使用了 WAF 防火墙,有鉴权机制,环境是云原生服务器+云原生网关,单机部署 DataEase V2.10.0
问题解决 {#%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3}
检查 DataEase V2 的服务运行状态,检查是否在应用中出现 413 的功能,缩小排查范围。
f12查看控制台,发现请求出现 request body too large 413,请求体过大。
确认:是否有 nginx 中间层,如有,需在 nginx.conf 配置文件中 server 处将 client_max_body_size 的值设置成 15m 。参考:++https://kb.fit2cloud.com/?p=202++
(1)超过网关链接缓存大小。查看云原生网关的请求拦截情况,发现请求被 buffer 缓存。
解决:修改参数:DownstreamConnectionBufferLimits 10485760
DownstreamConnectionBufferLimits 作用于网关连接,控制单条链接的缓冲区大小,配置后会影响吞吐和网关的内存使用。单位为字节。取值范围 [0,2147483647] 默认值 32768
单位是 byte ,也就是 10M 。再次使用功能,问题解决。
(2)云原生网关请求因为 Body 太大报错
网关连接 Buffer 太小导致的
问题解决:调大 Buffer 。
-
如果协议为HTTP 1.x:在控制台调整参数 DownstreamConnectionBufferLimits 。
-
如果协议为HTTP 2:在控制台调整参数 DownstreamConnectionBufferLimits 和 InitialStreamWindowSize 。
如:DownstreamConnectionBufferLimits 10485760,InitialStreamWindowSize 默认值是 65535,具体看需求,该参数作用于请求环节,网关与客户端使用 HTTP2 时协商的 Stream 初始窗口大小。单位为 byte 。取值范围 [0,2147483647] 默认值 65535
(3)检查鉴权机制是否有请求体最大默认值
如有登录鉴权、身份、请求验证的部分,检查请求体是否有设置最大值,如果没有,查找文档,看是否有默认的最大值,请求时超过了该值,发生 413 错误。
如:在请求传入前,有一个额外的请求拦截网关 / 策略应用 / 统一鉴权入口,该应用有一个默认的最大请求体配置,尝试增大默认配置的值。
(4)WAF 防火墙
检查 WAF 的设置,看是否有拦截请求体大小的默认值,查找 WAF 的配置,看是否有 max body size 相关的配置,如有,增大该值。
(5)检查全局鉴权机制
查看是否因为其他服务的使用,在云原生网关处误增加了全局认证鉴权,如有,尝试关掉全局鉴权验证一下,或者修改鉴权内容,放开对 DataEase 服务的拦截。
结果测试 {#%E7%BB%93%E6%9E%9C%E6%B5%8B%E8%AF%95}
按上述步骤修改后,访问正常,请求为 200 ,无 413 问题。