Kubernetes nginx ingress上传超1MB文件报413错误如何解决
问题原因
返回413 Request Entity Too Large是ingress-nginx默认请求体大小限制导致的。你使用的0.35.0版本ingress-nginx默认将Nginx核心参数client_max_body_size设为1m,仅允许1MB以内的请求体通过,超出阈值会直接由Nginx层返回413,请求不会转发到后端业务。你贴出的LoadBalancer类型Service配置与该限制无关,无需修改。
配置方案
支持两种配置粒度,可根据业务场景选择:
1. 全局配置(所有Ingress路由统一生效)
适用于所有业务通用上传大小上限的场景,配置修改后对所有走该ingress-nginx-controller的路由生效。
你是Helm部署的版本,可选择以下任意一种方式配置:
- 直接修改运行时ConfigMap(立即生效,重启不丢失)
执行编辑命令:
在kubectl edit configmap ingress-nginx-controller -n ingress-nginxdata字段下添加全局大小配置,示例设置全局上限为100MB:
保存退出后,controller会自动检测配置变更并重载Nginx,通常10秒内生效。data: proxy-body-size: "100m" - 修改Helm Values(避免后续Helm升级覆盖配置)
如果后续需要通过Helm升级ingress-nginx版本,建议把配置写入Values文件,防止自定义配置被覆盖:
写完执行controller: config: proxy-body-size: "100m"helm upgrade命令更新release即可生效。
2. 单Ingress自定义配置(仅指定业务路由生效)
适用于不同业务需要不同上传上限的场景,该配置优先级高于全局配置,不会影响其他业务路由。
找到你大文件上传接口对应的Ingress资源,在metadata.annotations段添加对应注解即可,示例为该上传接口设置1GB上限:
apiVersion: networking.k8s.io/v1beta1 # 0.35.0版本适配的Ingress API版本 kind: Ingress metadata: name: your-upload-service-ingress namespace: your-business-namespace annotations: nginx.ingress.kubernetes.io/proxy-body-size: "1024m" # 支持单位k/m/g,填"0"代表不限制请求体大小 spec: # 原有路由规则保持不变即可
应用该Ingress配置后,对应路由会立即重载生效。
配置校验
配置完成后可通过如下方式验证:
# 生成2MB大小的测试文件 dd if=/dev/zero of=test_2m.bin bs=1M count=2 # 调用上传接口测试 curl -X POST -F "file=@test_2m.bin" http://你的业务域名/上传接口路径
如果不再返回413错误,说明配置已生效。
注意:如果你的后端业务服务本身也配置了请求体大小限制,需要同步调整后端对应参数,否则Ingress层放行后,仍可能被后端拦截报错。
内容的提问来源于stack exchange,提问作者Jae
相关产品推荐
相关产品推荐

