«

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 或更大。

总结

上传文件限制要改三个地方:

  1. Nginx 的 client_max_body_size
  2. PHP 的 upload_max_filesize
  3. PHP 的 post_max_size

记住: 改完两边都要重载,别只改一边。

遇到问题加QQ23979811 协助处理

标签: PHP Nginx 上传文件 client_max_body_size 413