我正在上传一个 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。其中任何一个(或它们的衍生品或同级)都能够
- 如果需要,使用加密通道,
- 恢复中断的传输和
- 压缩传输
当您尝试通过 http 上传时,只有其中一个选项可供您选择(即,如果您使用 https,则为 #1)。
我希望您能考虑上述任何一个或其他几种替代方案。
答案4
将以下行添加到
http
或server
或location
上下文要增加的大小限制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
指令可以添加到http
、server
或中location
。
请注意,最大体型通常为大 1.34 倍比正在上传的文件大。例如,上面的限制100M
将只允许74M
上传一个文件。