文章11
标签16
分类0
Nextcloud踩坑记录

Nextcloud踩坑记录

Nginx证书链配置

Nginx不支持自动配置证书链,需要自己配置

类似这样的只有一个,不行

-----BEGIN CERTIFICATE-----
blablabla
-----END CERTIFICATE-----

类似这样的有很多个,行

-----BEGIN CERTIFICATE-----
blablabla1
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
blablabla2
-----END CERTIFICATE-----

一般申请证书后可以拿到 域名.crt域名_bundle.crt ,前面是给apache这些用的,带bundle的就是给Nginx用的。混用的话浏览器可能没什么关系,但是通过命令行走https可能就会出错,使用 openssl s_client -connect 域名 测试的时候也会报 unable to verify the first certificate

中文文本乱码

nextcloud22更新后图片的fetch不再通过ApiService.php的该方法,返回默认就是文本,所以直接使用LL223851提供的方法即可,不需要检查了。

下面是以前写的针对nextcloud21的解决方案

Can’t show Chinese word corrlecty, Maybe it’s because GB2312 and GBk encoding is not supported #405

按照网络流传的方法,没有验证文件是否为纯文本,如果遇到缩略图也会将缩略图当成文本来更改编码,导致图片无法预览(小头像也是如此)

$fileContents=$file->getContent();
$encoding = mb_detect_encoding($fileContents . 'a', 'UTF-8, GB2312, GBK, WINDOWS-1252, ISO-8859-15, ISO-8859-1, ASCII', true);
if ($encoding === '') {
	$encoding = 'ISO-8859-15';
}
$fileContents = iconv($encoding, 'UTF-8', $fileContents);
$file->putContent($fileContents );
return new FileDisplayResponse($file);

改成下面就好了,验证了一下header是否有声明内容为纯文本

$fileContents = $this->file->getContent();
$headers = $this->getHeaders();
if (array_key_exists("Content-Type", $headers) and $headers["Content-Type"] == "text/plain") {
	$encoding = mb_detect_encoding($fileContents . "a", "UTF-8, GB2312, GBK, WINDOWS-1252, ISO-8859-15, ISO-8859-1, ASCII", true);
	if ($encoding !== false) {
		$fileContents = iconv($encoding, "UTF-8", $fileContents);
	}
}
$file->putContent($fileContents);
return new FileDisplayResponse($file);

速度和稳定性

Nextcloud的Docker镜像默认的latest版本并不是最新的稳定版本,而是最新的版本(不一定稳定,至少个人实测问题很多),追求稳定需要专门指定stable版本的镜像

速度的话需要配置一下redis和mariadb,然后利用cron执行定时任务,而不是页面点一下执行一次

MariaDB相关报错

MariaDB最新版本(10.6)的镜像有点小问题,会导致Nextcloud报错 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED ,换成推荐的10.5即可

其他小毛病

报php-imagick不支持SVG

虽然没影响,但是看着警告难受

apt install libmagickcore-6.q16-6-extra
本文作者:.torrent
本文链接:https://blog.hitachimako.top/2021/fuck-nextcloud/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可