Nginx配置上传文件大小限制,client_max_body_size
时间:2026-10-7 07:44 作者:emer 分类: 无
前言
用户上传大文件,提示 413 Request Entity Too Large,这就是 Nginx 默认上传文件大小限制太小了。本文讲一下怎么改上传大小限制。
报错是什么样的
413 Request Entity Too Large
Nginx 默认限制是 1MB,传个大点的文件就报错。
配置方法
第一步:改 Nginx 配置
在 http 或 server 块里加:
client_max_body_size 50m;
意思是:最大允许上传 50MB 的文件。
第二步:同时改 PHP 配置
光改 Nginx 不够,PHP 自己也有上传限制:
upload_max_filesize = 50M
post_max_size = 50M
完整配置示例
Nginx 配置:
server {
listen 80;
server_name www.example.com;
root /var/www/html;
index index.php index.html;
# 上传文件大小限制
client_max_body_size 50m;
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP 配置(php.ini):
upload_max_filesize = 50M
post_max_size = 50M
重载生效
nginx -t
nginx -s reload
systemctl restart php-fpm
常见坑
坑1:只改了 Nginx,PHP 没改
改了 Nginx 的 client_max_body_size,但 PHP 的 upload_max_filesize 还是 2M,传大点的文件还是报错。
解决: Nginx 和 PHP 两边都要改。
坑2:413 还是 413
改了配置重载了,但还是 413。
原因: 改的不是实际加载的配置文件。
解决: 用 nginx -t 确认一下配置文件路径。
坑3:上传大文件超时
传个 50MB 的文件,传到一半 504 超时了。
原因: 上传慢,超时了。
解决: 调大超时时间:
client_body_timeout 300s;
fastcgi_read_timeout 300s;
坑4:post_max_size 比 upload_max_filesize 小
PHP 里 post_max_size 必须比 upload_max_filesize 大,否则还是上传不了。
建议: 两个设成一样大。
推荐配置
一般网站传图片、文档,设 20MB 够了:
client_max_body_size 20m;
upload_max_filesize = 20M
post_max_size = 20M
如果是视频网站,设 100MB 或更大。
总结
上传文件限制要改三个地方:
- Nginx 的
client_max_body_size - PHP 的
upload_max_filesize - PHP 的
post_max_size
记住: 改完两边都要重载,别只改一边。
遇到问题加QQ23979811 协助处理