Nginx 设置了“client_max_body_size”后出现“413 请求实体太大”

Nginx 设置了“client_max_body_size”后出现“413 请求实体太大”

我正在上传一个 26Gb 的文件,但是我得到:

413 Request Entity Too Large

我知道,这与有关client_max_body_size,所以我将此参数设置为30000M

  location /supercap {
    root  /media/ss/synology_office/server_Seq-Cap/;
    index index.html;
    proxy_pass  http://api/supercap;
  }

  location /supercap/pipe {
    client_max_body_size 30000M;
    client_body_buffer_size 200000k;
    proxy_pass  http://api/supercap/pipe;
    client_body_temp_path /media/ss/synology_office/server_Seq-Cap/tmp_nginx;
  }

但是当整个文件上传完成后仍然出现此错误。

答案1

修改NGINX配置文件

sudo nano /etc/nginx/nginx.conf

搜索此变量:client_max_body_size。如果找到它,只需将其大小增加到 100M 即可。如果它不存在,则可以在 http 内部和末尾添加它

client_max_body_size 100M;

测试你的 nginx 配置更改。

sudo service nginx configtest

重新启动 nginx 以应用更改。

sudo service nginx restart

修改 PHP.ini 文件的上传限制

并非所有配置都需要它,但您可能还需要修改 PHP 上传设置,以确保没有任何内容超出 php 配置的限制。

如果您使用 PHP5-FPM,请使用以下命令,

sudo nano /etc/php5/fpm/php.ini

如果您使用的是 PHP7.0-FPM,请使用以下命令,

sudo nano /etc/php/7.0/fpm/php.ini

现在逐一找到以下指令

upload_max_filesize
post_max_size

并将其限制增加到 100M,默认情况下它们分别是 8M 和 2M。

upload_max_filesize = 100M
post_max_size = 100M

最后保存并重新启动PHP。

PHP5-FPM 用户使用这个,

sudo service php5-fpm restart

PHP7.0-FPM 用户使用这个,

sudo service php7.0-fpm restart

它会正常工作!

答案2

如果您要上传这种大小的文件,您可能应该完全禁用正文大小检查:

client_max_body_size 0;

答案3

恕我直言,我不确定你为什么要使用 http 来传输那么多数据。我倾向于通过 ssh 进行大量传输

//such as:
tar cjf - /path/to/stuff | ssh user@remote-host "cd /path/to/remote/stuff;tar xjf -"

...这给了我一个 bzip 压缩传输。但如果我需要进行可恢复传输,我可能会使用 sftp、lftp,甚至 rsync。其中任何一个(或它们的衍生品或同级)都能够

  1. 如果需要,使用加密通道,
  2. 恢复中断的传输和
  3. 压缩传输

当您尝试通过 http 上传时,只有其中一个选项可供您选择(即,如果您使用 https,则为 #1)。

我希望您能考虑上述任何一个或其他几种替代方案。

答案4

将以下行添加到httpserverlocation上下文要增加的大小限制 nginx.conf,请输入:

client_max_body_size 100M;

来源:https://www.cyberciti.biz/faq/linux-unix-bsd-nginx-413-request-entity-too-large/

client_max_body_size指令可以添加到httpserver或中location

请注意,最大体型通常为大 1.34 倍比正在上传的文件大。例如,上面的限制100M将只允许74M上传一个文件。

相关内容