Nginx限制上传大小的核心指令是client_max_body_size,可配置在http、server、location块中,单位支持k/m/g,默认1m,超限返回413错误。

在 Nginx 中限制客户端上传文件大小,核心是通过 client_max_body_size 指令控制。它不是 HTTP 请求头(如 Client-Max-Body-Size 是错误写法),而是 Nginx 的配置指令,用于设定请求体(request body)允许的最大字节数。
确认指令名称和作用范围
client_max_body_size 是 Nginx 内置指令,影响所有含请求体的请求(如 POST、PUT)。它可出现在以下三个层级:
- http 块:全局生效,作为默认值
- server 块:覆盖 http 级设置,适用于某个域名或监听端口
-
location 块:最细粒度控制,例如只对
/upload路径放宽限制
基本配置写法
单位支持 k(KB)、m(MB)、g(GB),不加单位默认为字节。常见写法示例:
http {
client_max_body_size 10m; # 全局默认 10MB
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;"> # 对整个站点使用 20MB 上限
client_max_body_size 20m;
location /api/upload {
# 仅此接口允许 100MB
client_max_body_size 100m;
}
location /static {
# 静态资源不需要上传,可设小一点或禁用
client_max_body_size 1m;
}
}}
上传超限时的行为
当请求体超过设定值,Nginx 会直接返回 413 Request Entity Too Large 错误,且不会将请求转发给后端(如 PHP-FPM、Node.js)。这是关键点:限制发生在 Nginx 层,后端无需重复校验(但建议仍做二次防护以防绕过)。
你可以自定义错误页提升体验:
error_page 413 /413.html;
location = /413.html {
internal;
root /usr/share/nginx/html;
}
配合其他上传相关设置
单设 client_max_body_size 不足以应对所有上传场景,还需注意:
- client_body_timeout:设置读取请求体的超时时间(默认 60s),大文件上传需适当调高
-
client_body_buffer_size:内存缓冲区大小,太小会导致频繁写临时文件;一般设为
128k或256k - client_max_temp_file_size:上传中临时文件最大尺寸(默认 1G),若用到磁盘缓存需检查
- 确保后端(如 PHP 的
upload_max_filesize和post_max_size)设置 ≥ Nginx 的值,否则后端会拦截并报错
配置完记得重载 Nginx:nginx -t && nginx -s reload,避免语法错误导致服务中断。











