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 各有各的请求体上限
相关文章
|
20天前
|
存储 人工智能 安全
千问办公收费吗?有免费版、也有付费版,新用户注册免费送2000积分、每天登录也有100积分领取
阿里千问办公(QwenWork)是阿里推出的AI智能工作平台,支持一句话完成数据分析、PPT生成、网页搭建等复杂任务。提供免费版(注册送2000积分+每日100积分)、个人版(78元/月起)及企业版(198元/月/席起),功能覆盖Agent智能体、多任务并行、长文档解析与低代码建站等,适合个人高效办公与团队协同提效。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
260 0
|
17天前
|
存储 人工智能 监控
阿里云有免费Tokens吗?肯定的呀,免费领取超7000万Tokens,纯免费的
阿里云百炼新人可免费领取超7000万Tokens(每模型100万),仅限华北2(北京)地域,有效期90天。额度用完即停可防扣费,剩余额度在百炼控制台实时查询。
130 1
|
18天前
|
数据采集 文字识别 数据可视化
数据可视化开发的七个实践要点
本文总结ClearStoryData提出的7大数据可视化实践要点:直面“脏数据”、优先选用柱状图、用真实数据测试、预留细节设计空间、慎用动画、区分可视化与统计分析、融合设计与技术。兼顾实用性与专业性。
|
18天前
|
人工智能 弹性计算 运维
阿里云服务器有没有活动?轻量应用服务器与云服务器最新专属活动解析
本文针对上云用户普遍关心的活动真实性、低价机型库存、续费涨价三大核心疑问,按个人开发者、AI创造者、一人公司、中小企业、中大型企业及学生群体的全生命周期需求,逐一拆解阿里云当前全档位活动的配置、价格、购买资格与续费规则,同时补充每日秒杀、免费试用等入口提示,帮助用户跳出“只看低价”的误区,结合自身业务负载选出真正适配的高性价比方案。
|
18天前
|
SQL 数据可视化 定位技术
开眼了!一张地图,竟然能跑进浏览器、桌面、手机和 Jupyter:4.7k Star GeoLibre 把 GIS 变成一个工作区
GeoLibre 是一个 MIT 开源的轻量级云原生 GIS 平台,把地图可视化、空间 SQL、浏览器端分析、3D Tiles、插件和 Jupyter 工作流放进同一个跨端工作区。
|
2月前
|
数据采集 人工智能 搜索推荐
Geo优化不建议花钱学:务实自学与避坑指南
近两年“Geo”(生成式引擎优化)热度飙升,但付费课程多为搬运免费论文与官方文档。专家指出:其核心方法公开可验(如加权威引文提升40%可见度),无需高价报班;真正有效的是精读原始资料、动手做对照实验、持续迭代优化。把预算花在内容打磨和实践上,远胜速成课。
251 0
|
4月前
|
存储 PyTorch 算法框架/工具
百亿参数模型的并行训练:节点内张量并行、节点间数据并行
训练百亿参数模型,显存瓶颈远超算力限制:100B模型仅权重(bfloat16)就需200GB,叠加梯度、优化器状态与激活值,总内存需求达800GB–1.2TB。单纯堆GPU无效,关键在于科学切分——张量并行降单卡参数、流水线并行减层内存、数据并行扩样本,混合策略才是破局核心。
402 1
百亿参数模型的并行训练:节点内张量并行、节点间数据并行
|
5月前
|
弹性计算 人工智能 运维
199元/年!阿里云2核4G配置云服务器活动价格与选购指南:配置解析+适用场景及购买指南
2026年阿里云2核4G配置云服务器的特惠方案:轻量应用服务器2核4G(200M峰值带宽、50G ESSD云盘)抢购价199元/年,9.9元/月,适合个人开发者快速部署AI应用(如OpenClaw)。云服务器ECS通用算力型u1实例2核4G5M带宽同样199元/年,独享资源、新购续费同价,是企业用户性价比之选。此外还有经济型e实例99元/年、u2i实例680元起及c9i实例1742元起等多档可选。建议新用户追求快速上手选轻量应用服务器,企业稳定运营选u1实例,高并发高性能需求则考虑u2i或c9i实例。
|
人工智能 运维 Kubernetes
技术人的知识输出利器:一套高质量知乎回答生成指令模板
本文提供一套系统化知乎高赞回答生成模板,结合AI工具(如DeepSeek、通义千问),助力技术人高效输出高质量内容。涵盖结构框架、质量检查、实战示例与合规建议,提升表达清晰度与内容价值,适用于经验分享、技术科普等多种场景,实现知识输出的标准化与高效化。
1311 4