如何修改 nginx.conf 提高文件上传大小限制?
修改 client_max_body_size(如 100m)即可提高上传上限,可放 http/server/location 层;改完 nginx -t + reload;PHP 等应用层限制要同步调大。本文给出完整步骤与配套参数。
核心改动:在 nginx.conf 里设置 client_max_body_size 100m;(默认仅 1MB)。放在 http 块全局生效、server 块按站点生效、location 块按路径生效;改完 nginx -t 校验并 reload。若应用是 PHP/Java 等,它们自身的上传限制也要同步放宽。
操作步骤
1. 定位主配置文件
nginx -t # 输出会显示配置文件路径
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
2. 编辑并添加指令
http {
client_max_body_size 100m; # 全局放宽到 100MB
...
}
或只针对上传路径:
location /upload {
client_max_body_size 500m;
}
3. 校验并生效
sudo nginx -t && sudo systemctl reload nginx
配套要调的地方
大文件上传还要放宽超时(体积大了传输慢,别体积过了时间关不过):
client_body_timeout 120s;
proxy_read_timeout 120s; # 反代场景
fastcgi_read_timeout 120s; # PHP-FPM 场景
应用层限制:
- PHP:
upload_max_filesize、post_max_size(都要 ≥ Nginx 值) - Node/Express:
express.json({ limit: '100mb' }) - Spring:
spring.servlet.multipart.max-file-size
前置链路:CDN/云 LB(Cloudflare 免费版 100MB)也有自己的上限。
验证
curl -F "file=@bigfile.zip" http://your-site/upload
# 不再返回 413 即生效
观测云对照
上传失败率纳入监控。 413/504 等上传相关错误码经 DataKit 采集解析后按接口统计,调整限制前后的失败率曲线直接验证改动效果。
常见问题(FAQ)
Q:设多大合适?
A:按业务真实需求定,宁小勿大;纯附件上传场景 50-100m 常见。设 0 为不限制,公网不建议。
Q:改了还是 413?
A:检查是否有多层配置覆盖(location 里的旧值)、是否 reload、是否前面还有 CDN/网关限制,见本系列《client_max_body_size 不生效》篇。
Q:超大文件(GB 级)怎么办?
A:别硬扛单请求——分片上传或对象存储预签名直传。