前言
NextCloud 部署完毕后,设置中安全检查会检测出一些安全警告。本文记录 LAMP 部署 Nextcloud18 后,解决 Nextcloud 设置中出现的一系列安全与设置警告的过程。较为复杂的是启用 MySQL 4字节支持,上传过较多文件到 Nextcloud 会导致在格式转换时比较耗时,所以如果是新部署的 Nextcloud,尽量在未上传任何文件时解决此问题。
Nextcloud:18.0.2
OS:CentOS Linux release 7.7
Apache:2.4.6
MariaDB:5.5.64
PHP:7.2.24 (cli)
.htaccess 文件不起作用
为 Nextcloud 创建虚拟主机文件
vim /etc/httpd/conf.d/nextcloud.conf
添加如下内容
<VirtualHost *:80>
DocumentRoot /var/www/html/nextcloud/ #此处填写 Nextcloud 实际安装路径
ServerName your.server.com #如有域名,填写自己的域名,A 记录需指向服务器
<Directory /var/www/html/nextcloud/> #此处填写 Nextcloud 实际安装路径
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
重启 apache
service httpd restart
您的网页服务器未正确设置以解析
您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。
通过执行上面解决 “.htaccess 文件不起作用” 的步骤可以一并解决此问题
通过 HTTP 访问网站不安全
通过部署 SSL 证书,开启 HTTPS 解决,参考下述文章中开启 HTTPS 部分:
Nextcloud 性能优化
PHP 内存限制低于建议值 512MB
修改 PHP 配置文件php.ini
中memory_limit
为合适值
vim /etc/opt/rh/rh-php72/php.ini #php.ini 目录随 PHP 版本不同而不同
查找memory_limit
,将默认的128M
更改为512M
内存缓存未配置
修改 Nextcloud 配置文件
config.php
vim /var/www/html/nextcloud/config/config.php
添加以下配置
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\APCu',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
修改 APCu 配置文件,去掉apc.enable_cli
的注释,并设置其值为1
:
vim /etc/opt/rh/rh-php72/php.d/40-apcu.ini
PHP 的组件 OPcache 没有正确配置
修改 PHP Opcache 配置
vim /etc/opt/rh/rh-php72/php.d/10-opcache.ini #配置文件路径和名称随 PHP 版本不同而不同
修改配置如下
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
数据库丢失了一些索引
在 Nextcloud 目录下使用 occ 命令修复
cd /var/www/html/nextcloud
sudo -u apache php occ db:add-missing-indices
sudo -u apache php occ db:convert-filecache-bigint
所使用的数据库为 MySQL 但没有对4字节字符的支持
Nextcloud18 相关文档
确保数据库为Barracuda InnoDB文件格式
mysql -uroot -p #登录数据库。会提示输入 root 密码,根据实际情况来,如没设置,直接回车
#登录成功后,会显示数据库版本,记下来,后续要用到
show variables like 'innodb_file_format';
以上结果表明innodb_file_format
是Antelope
,执行以下命令在数据库中进行文件格式升级
SET GLOBAL innodb_file_format=Barracuda;
FLUSH PRIVILEGES;
exit;
根据数据库版本进行下一步(本例使用的数据库版本为 MariaDB 5.5.64)
MySQL 8.0 及更高版本 或 MariaDB 10.03 及更高版本
在数据库配置文件中[mysqld]
字段下添加如下配置
innodb_file_per_table=1
重启数据库,然后继续后面的 启用 MySQL 4字节支持
MySQL 8.0 之前版本
在数据库配置文件中[mysqld]
字段下添加如下配置
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1
重启数据库,然后继续后面的 启用 MySQL 4字节支持
MariaDB 10.2 之前本版(本例适用的版本)
vim /etc/my.cnf
在数据库配置文件中[mysqld]
字段下添加如下配置
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1
重启数据库
systemctl restart mariadb
进入数据库,查看文件格式是否更改为Barracuda
SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nextcloud%";
如果文件格式都是Barracuda
,继续后面的 启用 MySQL 4字节支持,否则执行以下步骤
(本例在此步骤时,提示Unknown column 'FILE_FORMAT' in 'field list'
,转向 启用 MySQL 4字节支持 后,解决了问题 )
进入INFORMATION_SCHEMA
数据库
USE INFORMATION_SCHEMA;
创建 SQL 命令,批量转换到到Barracuda
SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nextcloud";
上述步骤为 nextcloud 数据库中的每个表返回一个 SQL 命令。将返回的所有命令复制到文本编辑器中,用空格替换|
,并将所有 SQL 命令复制到 MariaDB 执行
执行结束后,继续后面的 启用 MySQL 4字节支持
启用 MySQL 4字节支持
进入 Nextcloud 文件夹,开启维护模式
cd /var/www/html/nextcloud
sudo -u apache php occ maintenance:mode --on
进入数据库,通过以下命令更改数据库字符集和排序规则
ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
通过以下命令将config.php
文件中mysql.utf8mb4
配置为真
sudo -u apache php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
通过以下命令运行修复步骤将所有现有表转换为新的排序规则
sudo -u apache php occ maintenance:repair
退出维护模式
sudo -u apache php occ maintenance:mode --off
.htaccess 文件不起作用,按照您的设置后,为什么无法打开httpd,网站访问不了?
DocumentRoot ServerName Directory 这三项的内容要填写对,无法启动 httpd 说明虚拟主机文件配置有问题,可以参考终端的提示信息定位一下问题。