这篇文章上次修改于 2764 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

之前写过 基于CentOS7安装宝塔面板部署NextCloud搭建自己的网盘,是部署NextCloud 15.x的,如果部署有什么问题,可以先看看之前的文章。

NextCloud部署完后,打开概览会检查到一些安全及设置警告,安全及设置警告如下图

检查到11条警告

  • 一些文件没有通过完整性检查。了解如何解决该问题请查看我们的 文档。(无效文件列表… / 重新扫描…)
  • 您的数据目录和文件可以从互联网直接访问。.htaccess 文件不起作用。强烈建议您配置 Web 服务器,以便数据目录不再可访问,或者你可以将数据目录移动到 Web 服务器文档根目录。
  • PHP的安装似乎不正确,无法访问系统环境变量。getenv("PATH")函数测试返回了一个空值。 请参照安装说明文档 ↗中的PHP配置说明查阅您服务器的PHP配置信息,特别是在使用php-fpm时。
  • HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒. 为了提高安全性,建议参照security tips ↗中的说明启用HSTS.
  • 您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。
  • 您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。
  • 未找到 PHP 的 "fileinfo" 模块。强烈推荐启用该模块,从而获得更好的 MIME 类型探测结果。
  • 内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。更多信息请参见文档。
  • PHP 的 OPcache 模块未载入。推荐开启获得更好的性能。
  • 该实例缺失了一些推荐的PHP模块。为提高性能和兼容性,我们强烈建议安装它们。
    imagick
  • 数据库中的一些列由于进行长整型转换而缺失。由于在较大的数据表重改变列类型会耗费一些时间,因此程序没有自动对其更改。您可以通过命令行手动执行 "occ db:convert-filecache-bigint" 命令以应用挂起的更改。该操作需要当整个实例变为离线状态后执行。查阅相关文档以获得更多详情。
    filecache.mtime
    filecache.storage_mtime

接下来,我们看看如何逐一解决这些安全及设置警告。

  • 一些文件没有通过完整性检查。了解如何解决该问题请查看我们的 文档。(无效文件列表… / 重新扫描…)

要解决这个问题很简单,打开无效文件列表,里面会把NextCloud目录下多余的文件全部罗列出来,照着这个列表,删除相关文件,即可解决。(也就是说,NextCloud文件夹里面不要放一些乱七八糟的文件)。

删除文件后,需要点击重新扫描,再次检查,就不会有警告提示了。

  • 您的数据目录和文件可以从互联网直接访问。.htaccess 文件不起作用。强烈建议您配置 Web 服务器,以便数据目录不再可访问,或者你可以将数据目录移动到 Web 服务器文档根目录。

解决方法是修改nextcloud绑定的网站配置文件,添加nextcloud常用目录禁止访问即可

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ 
{
    deny all;
}

照上图操作,添加完毕,保存后即可生效。

  • PHP的安装似乎不正确,无法访问系统环境变量。getenv("PATH")函数测试返回了一个空值。 请参照安装说明文档 ↗中的PHP配置说明查阅您服务器的PHP配置信息,特别是在使用php-fpm时。

打开宝塔面板,打开文件管理,并编辑/www/server/php/72/etc/php-fpm.conf文件,在其末尾,添加一行代码

env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin

保存后,重启PHP服务,即可解决该问题。

  • HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒. 为了提高安全性,建议参照security tips ↗中的说明启用HSTS.

解决方法还是修改nextcloud绑定的网站配置文件,添加一行header信息

add_header Strict-Transport-Security "max-age=63072000;";

照上图操作,添加完毕,保存后即可生效。

  • 您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。

  • 您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。

这两个警告可以一起解决,出现该提示一般是因为这两个路径的伪静态设置有问题,导致无法正常访问。
解决方法还是修改nextcloud绑定的网站配置文件,添加两行重定向配置,

rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;

照上图操作,添加完毕,保存后即可生效。

  • 未找到 PHP 的 "fileinfo" 模块。强烈推荐启用该模块,从而获得更好的 MIME 类型探测结果。

  • PHP 的 OPcache 模块未载入。推荐开启获得更好的性能。

  • 该实例缺失了一些推荐的PHP模块。为提高性能和兼容性,我们强烈建议安装它们。

    imagick

以上三个警告是未检测到PHP相关模块的警告,可以通过安装PHP模块,一起解决。
根据提示,需要安装的模块分别为fileinfo、opcache、imagemagick。

模块安装好后,fileinfo 和 imagemagick 不需要额外配置,由于宝塔在安装的opcache模块后自动加入的配置不符合nextcloud的推荐配置,所以需要修改一下,接下来我们配置一下opcache。
打开配置文件,搜索并找到[Zend Opcache]这一行,把如下新的代码替换[Zend Opcache]里原有的代码

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

设置完毕后,重启PHP服务,即可生效。

  • 内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。更多信息请参见文档。

这个问题是指php的缓存模块没有安装,nextcloud支持APCu、Memcached、Redis等模块,选择其中一个安装即可,这里,我们选择redis模块。

安装完毕后,打开宝塔面板,打开/www/wwwroot/你的域名/config/config.php,在最后一个 ); 之前添加如下代码

'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
      ),

配置完成后,重启PHP服务,即可生效。

  • 数据库中的一些列由于进行长整型转换而缺失。由于在较大的数据表重改变列类型会耗费一些时间,因此程序没有自动对其更改。您可以通过命令行手动执行 "occ db:convert-filecache-bigint" 命令以应用挂起的更改。该操作需要当整个实例变为离线状态后执行。查阅相关文档以获得更多详情。

    filecache.mtime
    filecache.storage_mtime

此警告是说,数据库的一些索引丢失了,需要使用OCC修复一下。OCC是owncloud的命令行,而nextcloud又是基于owncloud开发的,所以需要用到OCC来修复丢失的数据库索引。
修复命令为:

php occ db:convert-filecache-bigint

SSH进入服务器nextcloud的根目录,并执行修复命令

执行命令后,报错。也就是权限问题。根据提示,我们在命令前加上sudo -u www,把修复命令更改为

sudo -u www php occ db:convert-filecache-bigint

执行后,根据提示,按y,回车
执行正常后,没有任何提示,返回提示符,表示执行完毕。

至此,所有安全及设置警告全都解决,再次执行检查后,提示 所有检查已通过