Nginx 413 排错:client_max_body_size 加在哪一层才生效

简介: 本文详解Nginx 413错误排错:`client_max_body_size`需正确配置在`http`/`server`/`location`任一作用域(优先级递增),推荐写在`server`块中与`listen`同级;强调配置后必须`nginx -t && nginx -s reload`,并提醒排查CDN、多server块、后端限制等常见陷阱

Nginx 413 排错:client_max_body_size 加在哪一层才生效

现象

上传一个 20 多 MB 的附件,前端直接弹 413:

413 Request Entity Too Large
nginx/1.20.2

不是超时,也不是网络中断,请求压根没进后端。

环境

  • 链路:浏览器 → Nginx(443) → 反向代理 → Spring Boot(8080)
  • 站点配置在 /etc/nginx/conf.d/app.conf
  • 后端 spring.servlet.multipart.max-request-size 早就调到 100MB 了

后端限制已经放开,所以问题不在 Java 这边。

先确认是 Nginx 拦的

这一步别跳。判断方法很简单:去看后端访问日志。

413 是 Nginx 读完请求头、发现 Content-Length 超限就直接返回的,请求不会转发给 upstream。所以如果这次上传在 Spring Boot 的 access log 里完全没有记录,而错误页又是标准的 Nginx 样式、响应头带 Server: nginx,那就基本确定拦在 Nginx 层了。

Nginx 自己的 error.log 里会留一句:

client intended to send too large body: 25165824 bytes

看到这句就不用再怀疑了。

另外,如果这个请求是 JSON 而不是文件,client_max_body_size 一样管,它不是只针对 multipart 上传的。

加在哪

client_max_body_size 只能写在三个地方:http、server、location。作用域越小优先级越高,也就是 location > server > http。

想让整个站点生效,写在 server 块的大括号里面,和 listen、server_name 同级,别写进 location:

server {
   
    listen 443 ssl;
    server_name example.com;

    client_max_body_size 100m;

    root /www/wwwroot/example;
    index index.html;

    location / {
   
        try_files $uri $uri/ /index.php?$query_string;
    }
}

写在 server 块里的哪一行其实无所谓,Nginx 不靠顺序解析这个指令。我习惯塞在 server_name 下面,改的时候一眼能找到。

几个容易写错的位置:

  • 写进 http {} 外面或者 events {} 里 —— nginx -t 直接报错,指令不允许出现在那儿
  • 写进某个 location 里 —— 只对匹配这个 location 的请求生效,其他路径还是默认的 1m
  • 同一个 server 块里写了两次 —— 报 "client_max_body_size" directive is duplicate,改之前先 grep 一下有没有旧值

只想放开上传接口

那就别在 server 层放大,收窄到具体路径更安全:

server {
   
    listen 443 ssl;
    server_name example.com;

    location /api/upload {
   
        client_max_body_size 100m;
        proxy_pass http://127.0.0.1:8080;
    }
}

全站放开 100m 意味着任何一个接口都能被打 100MB 的包,能收窄就收窄。

所有站点统一放开

写在 nginx.conf 的 http 块里:

http {
   
    client_max_body_size 100m;

    include /etc/nginx/conf.d/*.conf;
}

之后某个站点想单独收紧,在它的 server 块里再写一次小的值就行。

改完别忘了这一步

nginx -t
nginx -s reload

nginx -t 一定要跑,配置写错位置它会直接告诉你哪一行。

还是 413

reload 之后仍然 413,按这个顺序查:

  1. 改的不是那台 Nginx。 链路里可能还有一层:CDN、WAF、SLB,或者前面还架着一台反代。看错误页样式和 Server 响应头,是谁返回的就改谁。这是最常见的原因。
  2. 80 和 443 两个 server 块。 只改了监听 80 的那个,实际流量走的是 443 的块,等于没改。
  3. 后端自己的限制。 Nginx 放行之后请求才轮到应用,PHP 的 post_max_size、upload_max_filesize,Tomcat 的 maxPostSize,Express 的 express.json({ limit }),各自还得对上。
  4. 面板改错地方。 用宝塔的话在「网站 → 设置 → 配置文件」里改,改完在面板里重载,别直接手改 /www/server/nginx/conf/nginx.conf 就以为生效了。

有没有必要把限制调得很大

不建议。真要传大文件,比堆 client_max_body_size 靠谱的做法是:

  • 前端先压缩,或者分片上传 + 断点续传
  • 走对象存储预签名 URL 直传,body 根本不过自己的 Nginx
  • 流式处理,别把整个 body 一次性读进内存

这个阀门存在的意义就是挡恶意大包,图省事设成 0(等于关掉检查),迟早要在别的地方还回来。

附:各层对应的参数

排查的时候对着找就行:

层级 配置
Nginx client_max_body_size 100m;
Apache LimitRequestBody 104857600(单位字节)
PHP upload_max_filesize = 100M、post_max_size = 100M(后者要大于前者)
Spring Boot spring.servlet.multipart.max-file-size、max-request-size
Tomcat maxPostSize、maxSwallowSize
Node/Express express.json({ limit: '100mb' })、multer 的 limits.fileSize
云网关/CDN API Gateway、Cloudflare、WAF、ALB 各有各的请求体上限
相关文章
|
2月前
|
存储 人工智能 安全
千问办公收费吗?有免费版、也有付费版,新用户注册免费送2000积分、每天登录也有100积分领取
阿里千问办公(QwenWork)是阿里推出的AI智能工作平台,支持一句话完成数据分析、PPT生成、网页搭建等复杂任务。提供免费版(注册送2000积分+每日100积分)、个人版(78元/月起)及企业版(198元/月/席起),功能覆盖Agent智能体、多任务并行、长文档解析与低代码建站等,适合个人高效办公与团队协同提效。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
493 0
|
1月前
|
存储 人工智能 监控
阿里云有免费Tokens吗?肯定的呀,免费领取超7000万Tokens,纯免费的
阿里云百炼新人可免费领取超7000万Tokens(每模型100万),仅限华北2(北京)地域,有效期90天。额度用完即停可防扣费,剩余额度在百炼控制台实时查询。
264 1
|
2月前
|
数据采集 文字识别 数据可视化
数据可视化开发的七个实践要点
本文总结ClearStoryData提出的7大数据可视化实践要点:直面“脏数据”、优先选用柱状图、用真实数据测试、预留细节设计空间、慎用动画、区分可视化与统计分析、融合设计与技术。兼顾实用性与专业性。
|
2月前
|
人工智能 弹性计算 运维
阿里云服务器有没有活动?轻量应用服务器与云服务器最新专属活动解析
本文针对上云用户普遍关心的活动真实性、低价机型库存、续费涨价三大核心疑问,按个人开发者、AI创造者、一人公司、中小企业、中大型企业及学生群体的全生命周期需求,逐一拆解阿里云当前全档位活动的配置、价格、购买资格与续费规则,同时补充每日秒杀、免费试用等入口提示,帮助用户跳出“只看低价”的误区,结合自身业务负载选出真正适配的高性价比方案。
|
2月前
|
人工智能 JSON 数据格式
一次中文 AI 引用的结构分析:如何区分 RETRIEVED 与 SELECTED
用 74 条中文商业问句对两个中文大模型应用做独立会话采集,落盘 6183 条信源记录,并把「检索到」与「被引用」严格分开统计。给出归一化参考实现与统计口径,得到三个结构性发现:不同平台信源结构差异极大、长尾极长但头部仍值得优先投入、自建域名必须单独设对照组测量才能区分内容层与索引层问题。
|
2月前
|
SQL 数据可视化 定位技术
开眼了!一张地图,竟然能跑进浏览器、桌面、手机和 Jupyter:4.7k Star GeoLibre 把 GIS 变成一个工作区
GeoLibre 是一个 MIT 开源的轻量级云原生 GIS 平台,把地图可视化、空间 SQL、浏览器端分析、3D Tiles、插件和 Jupyter 工作流放进同一个跨端工作区。
152 0
|
2月前
|
人工智能 测试技术 UED
Google公开Agent Quality Flywheel:为什么改Prompt的模型不能同时当裁判?
本文揭示AI Agent质量优化的核心陷阱:若同一模型既优化Prompt又评分,易“讨好裁判”而非提升真实能力。Google强调“优化器与评测器必须解耦”,需冻结测试集、Rubric和基线版本,实施盲测与独立指标验证。真提升需经五重门禁检验——这才是可信质量飞轮的基石。
|
2月前
|
SQL 监控 关系型数据库
同城本地生活平台搭建:如何处理数据备份和导出
私有化交付常陷“能下单即验收”误区,致后续数据归属不清、导出困难。本文详解本地生活平台交付必备五项:主库信息、备份策略、业务导出方式、文件路径、只读账号,并强调财务现场核验导出、多业务统一过滤、权限最小化等关键实践,助创业者一次交清数据主权
|
3月前
|
缓存 自然语言处理 并行计算
RTX4090单卡跑Qwen3-32B实践:4bit量化+Transformers与vLLM双方案部署差异.193
本文详解RTX4090(24GB显存)部署Qwen3-32B大模型的实战方案:聚焦4bit量化(NF4+双量化)突破显存瓶颈,对比Transformers与vLLM框架——后者推理快2倍、显存利用率更高,实测生成质量无损,为消费级显卡运行32B模型提供可落地的最优解。
638 1
|
4月前
|
iOS开发 MacOS Windows
Dario 常驻 Codex|从生图到安装,手把手带你换一套 Codex 皮肤
本文为 macOS 用户提供的 Codex Desktop 换肤实践指南,基于开源项目 Codex Dream Skin,教你用 ChatGPT 生成像素风“Dario”主题背景图,并完成一键定制与还原。非官方教程,适配 Windows 可参考流程。需 ChatGPT 会员及基础操作经验。
1015 0
Dario 常驻 Codex|从生图到安装,手把手带你换一套 Codex 皮肤

热门文章

最新文章