在正常情况下,Nextcloud的默认的最大上传限制为512MB,在你的的文件系统和操作系统允许的前提下,你可以提升这一限制。换一种说法,能上传的最大文件的大小还取决于你的浏览器和操作系统:
[ssbluelist]
在64位系统中允许上传更大的文件,具体能上传多大仍然取决于你的操作系统的版本。
[infobox]使用Nextcloud sync 客户端可以无视这个上传限制,因为这个客户端会将文件切分后上传。[/infobox]
[ssbluelist]
[infobox]Nextcloud利用其程序根目录下的的.htaccess文件来控制上传限制。因为php-fpm无法读取.htaccess文件,所以相关的PHP设置必须要设置在
nextcloud/.user.ini中。[/infobox]
在.htaccess文件中中设置以下参数,可将上传文件大小限制设置为16GB:
php_value upload_max_filesize = 16G php_value post_max_size = 16G
当然,具体要设置为多少取决于你的需求。
而另一个限制了大文件的上传的因素是PHP的超时(timeout),如果你在日志中看到超时的记录,可以将PHP的超时的数值调得大一些:
php_value max_input_time 3600 php_value max_execution_time 3600
说到timeout,不仅PHP会有timeout,HTTP服务器也会有。例如Apache的
mod_reqtimeout
模块,它也可能会导致大文件上传的失败。如果你在使用这个模块并且遇到了超时的问题,那么可以考虑在Apache配置中禁用它:
使用命令禁用:
a2dismod reqtimeout
service apache2 restart
或者直接删除该模块的配置文件:
rm /etc/apache2/mods-enabled/reqtimeout.*
service apache2 restart
(实际环境中Apache的安装方式可能有所不同,禁用该模块方式也可能不同)
除了上文所述的会限制到大文件上传的地方,一些HTTP服务器的配置也会影响到大文件的上传:
[ssbluelist]
1.LimitRequestBody:这项配置一般在Apache做反响代理服务器用到,具体用法是在Apache配置文件中加上这样一句(后面所跟的数值的单位为K):
LimitRequestBody 102400 #允许上传最大为100k的文件
2.SSLRenegBufferSize:在进行SSL握手之前,Apache会将请求先存放到缓冲区中,这项配置决定了缓冲区的大小:
SSLRenegBufferSize 262144 #缓冲区大小为262144Bytes
[ssbluelist]
[/ssbluelist]Nginx中有这样几个影响上传文件的配置选项:
[ssbluelist]
client_max_body_size 512M; #最大请求实体为512M
fastcgi_buffers 64 4K; #为小于256k的PHP页面分配64个4k缓冲区
fastcgi_read_timeout 60 #超时时间为1分钟
client_body_temp_path /spool/nginx/client_temp 3 2; #请求实体临时路径 3、2为存放临时文件的目录名的数字位数
fastcgi_request_buffering off;
[infobox]确保client_body_temp_path指向具有足够空间的上传文件大小的分区,并且与upload_tmp_dir或temp目录(见下文)为相同的分区。为了获得最佳性能,最好将它们放在专用于交换和临时存储的单独的硬盘驱动器上。[/infobox]
如果Nginx作为反向代理服务器,那么还会有这样两项配置与之有关:
[ssbluelist]
如果你不想使用Nextcloud的.htaccess或.user.ini文件,也可以直接去修改PHP的配置,如果要这样做,确保注释掉.htaccess中的与文件上传有关的那几行。如果您在32位系统上运行Nextcloud,则您的php.ini文件中的任何open_basedir指令都需要注释掉。
在php.ini中设置下面的两个参数,以修改最大文件上传限制为16G(或其他数值):
upload_max_filesize = 16G post_max_size = 16G
为PHP设置你想使用的临时目录的位置,例如:
upload_tmp_dir = /var/big_temp_file/
输出缓冲必须在.htaccess或.user.ini或php.ini中关闭,否则返回与内存相关的错误:
output_buffering = 0
如果你无法修改php.ini,那么你也可以在config.php中指定
upload_tmp_dir
的值,例如在文件中加入这样一行:
'tempdirectory' => '/var/big_temp_file/',
详细的内容可以参见官方文档中关于config.php的介绍。
如果在config.php(参见Config.php参数)文件中配置了session_lifetime设置,那么请确保它不是太低。此设置需要至少配置为最长上传时间(以秒为单位)。如果不确定,就从配置中完全删除它,将其重置为config.sample.php中显示的默认值。
说了这么多,最简单的方法还是在管理页面中直接修改上传大小(这个途径受制上文中所有内容):
前提是.htaccess文件正常工作。
额,你可能遇到这样的尴尬的情况:
将.htaccess文件的用户设置为www-data就可以了:
chown www-data .htaccess