Nginx 的 client_max_body_size 默认值是多少?

默认 1 MiB(1,048,576 字节)。超出即返回 413 Request Entity Too Large。修改可放 http/server/location 三层,内层覆盖外层;改完 reload 生效。本文含检查命令与配套注意事项。

最佳实践
Nginx 的 client_max_body_size 默认值是多少?封面

答案:1 MiB(1m,1,048,576 字节)。请求体(文件上传、POST 数据)超过这个值,Nginx 直接返回 413 Request Entity Too Large。表单上传稍大的附件就失败,多半是没调过这个值。

检查当前生效值

sudo nginx -T 2>&1  # 使用与运行实例相同的二进制、-c/-p 参数,查看包含文件及上下文

应检查实际匹配请求的 http/server/location 及继承关系;只有有效配置中均未设置时才用默认 1 MiB。仅搜索几个目录不能证明没有配置。

修改方法

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 表示不限制(公网慎用)。

别忘配套调整

  1. 应用层限制:PHP 的 upload_max_filesize/post_max_size、Node 框架的 body limit,任何一环比它小照样失败
  2. 前置链路:CDN/云负载均衡/APIGW 各自有体积上限,应按具体供应商、套餐和配置核对
  3. 超时联动:上传阶段检查 client_body_timeout(两次读取客户端请求体之间的等待);proxy_read_timeout/fastcgi_read_timeout 控制上游两次读取之间的等待,不是上传总时长

常见问题(FAQ)

Q:为什么有的接口 1 MiB 默认够用也建议显式写?
A:显式声明是自文档化——后人不用猜默认值,也不会因 Nginx 版本/发行版预设差异踩坑。

Q:client_max_body_size 影响 GET 请求吗?
A:限制的是请求体,不按方法排除;GET 通常没有 body,但带 body 时也受此限制。

Q:超大文件(几个 G)上传怎么设计?
A:别把限制无脑调大——用分片上传/断点续传,或对象存储预签名 URL 直传,绕开 Web 服务器。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台