Nginx 的 client_max_body_size 默认值是多少?
默认 1MB。超出即返回 413 Request Entity Too Large。修改可放 http/server/location 三层,内层覆盖外层;改完 reload 生效。本文含检查命令与配套注意事项。
答案:1MB(1m)。请求体(文件上传、POST 数据)超过这个值,Nginx 直接返回 413 Request Entity Too Large。表单上传稍大的附件就失败,多半是没调过这个值。
检查当前生效值
grep -r client_max_body_size /etc/nginx/nginx.conf /etc/nginx/conf.d/ /etc/nginx/sites-enabled/
没搜到任何配置 = 用的就是默认 1MB。
修改方法
http {
client_max_body_size 50m; # 全局
server {
client_max_body_size 100m; # 该站点覆盖全局
location /upload {
client_max_body_size 500m; # 该路径再覆盖
}
}
}
三层上下文都合法,内层覆盖外层。改完:
sudo nginx -t && sudo systemctl reload nginx
设为 0 表示不限制(公网慎用)。
别忘配套调整
- 应用层限制:PHP 的
upload_max_filesize/post_max_size、Node 框架的 body limit,任何一环比它小照样失败 - 前置链路:CDN/云负载均衡/APIGW 各自有体积上限(如 Cloudflare 免费版 100MB)
- 超时联动:大文件上传慢,
proxy_read_timeout/fastcgi_read_timeout也要放宽,否则体积过了时间关不过
观测云对照
413 错误纳入监控。 Nginx 日志经 DataKit 采集并解析状态码后,413 出现频次可在观测云直接查询;对上传接口的 413 比例告警,能在用户反馈前发现配置问题。
常见问题(FAQ)
Q:为什么有的接口 1MB 默认够用也建议显式写?
A:显式声明是自文档化——后人不用猜默认值,也不会因 Nginx 版本/发行版预设差异踩坑。
Q:client_max_body_size 影响 GET 请求吗?
A:不影响。它限制的是请求体,GET 一般没有 body。
Q:超大文件(几个 G)上传怎么设计?
A:别把限制无脑调大——用分片上传/断点续传,或对象存储预签名 URL 直传,绕开 Web 服务器。