proxy_request_buffering默认on是防御Slow Body攻击的核心防线,关闭后Nginx退化为流式代理,后端直面攻击;应保持不配置该注解以沿用默认值,并配套设置client_body_timeout 10s、limit_conn perip 8等防护参数。

在 Kubernetes Ingress 中,请求体缓冲机制(proxy_request_buffering)是防御 Slow Body 类慢速 HTTP 攻击的核心防线。它让 Nginx 在转发请求前,先完整接收并校验整个请求体,从而启用 client_body_timeout 等超时控制——一旦关闭,Nginx 就退化为流式代理,后端将直接暴露于攻击之下。
保持 proxy_request_buffering 默认开启
默认值为 on,这是最安全的起点。无需额外配置即生效:
- Ingress 注解中不设置
nginx.ingress.kubernetes.io/proxy-request-buffering,即沿用默认行为 - 若已误设为
"off",应立即移除该注解或改为"on" - 该机制仅在 Nginx 1.16+ 版本中稳定支持,确认 Ingress Controller 镜像版本不低于此要求
配套收紧 body 超时与限流策略
缓冲开启后,必须激活对应超时和连接限制,否则形同虚设:
-
client_body_timeout 10s:从请求头收完开始计时,body 传输中断超 10 秒即断连(防 Slow Body) -
limit_conn_zone $binary_remote_addr zone=perip:10m;+limit_conn perip 8;:单 IP 最多维持 8 个并发连接,防止扫描器复用少量 IP 持续建连 - 若前端有云负载均衡(如 AWS ALB),需配合
set_real_ip_from和$http_x_forwarded_for做真实 IP 限流
按业务场景分级控制请求体大小
避免攻击者用“合法尺寸但极慢发送”的方式绕过防护:
- 普通 API 接口:全局设
client_max_body_size 5m,足够覆盖 JSON、小图等载荷 - 文件上传路径(如
/upload):在对应 Ingress 的location级注解中单独放宽,例如:nginx.ingress.kubernetes.io/configuration-snippet: |<br> client_max_body_size 200m;
- 禁用检查(
client_max_body_size 0)不可取,等于主动放弃入口层尺寸拦截
容器环境特别注意缓冲区与重置行为
在 K8s 动态伸缩场景下,连接资源更敏感,需闭环处理超时后果:
- 必须启用
reset_timedout_connection on;:超时后发 RST 包,跳过四次挥手,立即释放 socket 和 conntrack 表项 -
client_body_buffer_size 4k;:设为 2k–8k 之间,小请求走内存,超限时落盘,避免 worker 内存被占满 - 确保
client_body_temp_path挂载目录有足够空间和写权限,否则大请求会直接 500


















