前言

Nextcloud 及相关环境默认配置并不合理,为了提升使用体验,需要进一步配置以优化 Nextcloud 性能。本文介绍从后台任务、文件锁、文件上传、通信协议等方面来优化 Nextcloud,本文使用 Nextcloud18,方法同样适用于其他版本。

操作环境:
Nextcloud:18.0.2
OS:CentOS Linux release 7.7
Apache:2.4.6


配置 Cron

在 Nextcloud 设置->基本设置中设置后台任务为 Cron,然后执行以下命令为 Nextcloud 启用 Cron:

sudo echo '*/5 * * * * apache php /var/www/html/nextcloud/cron.php' >> /etc/crontab

启用 Redis 锁

编辑 Nextcloud 配置文件config.php

sudo vi /var/www/html/nextcloud/config/config.php

添加如下内容:

'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis', #此项在警告解决中已经添加过

开启大文件上传

编辑 PHP 配置文件php.ini

sudo vi /etc/opt/rh/rh-php72/php.ini

查找以下配置,并将参数修改如下:

upload_max_filesize 16G
post_max_size 16G
max_input_time 3600
max_execution_time 3600

美化 URL,去除 index.php

方法一 使用 occ 命令更新 .htaccess 文件

在 Nextcloud 配置文件config.php中加入以下两行:

'overwrite.cli.url' => 'your.domain.com', ##填写访问 Nextcloud 的 URL 地址
'htaccess.RewriteBase' => '/',

然后进入 Nextcloud 文件夹,执行 occ 更新命令:

cd /var/www/html/nextcloud
sudo -u apache php occ maintenance:update:htaccess

方法二 直接编辑 Nextcloud 的 .htaccess 文件:

sudo vi /var/www/html/nextcloud/.htaccess

在最下面添加如下内容:

<IfModule mod_rewrite.c>
  Options -MultiViews
  RewriteRule ^core/js/oc.js$ index.php [PT,E=PATH_INFO:$1]
  RewriteRule ^core/preview.png$ index.php [PT,E=PATH_INFO:$1]
  RewriteCond %{REQUEST_FILENAME} !\.(css|js|svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$
  RewriteCond %{REQUEST_FILENAME} !core/img/favicon.ico$
  RewriteCond %{REQUEST_FILENAME} !/remote.php
  RewriteCond %{REQUEST_FILENAME} !/public.php
  RewriteCond %{REQUEST_FILENAME} !/cron.php
  RewriteCond %{REQUEST_FILENAME} !/core/ajax/update.php
  RewriteCond %{REQUEST_FILENAME} !/status.php
  RewriteCond %{REQUEST_FILENAME} !/ocs/v1.php
  RewriteCond %{REQUEST_FILENAME} !/ocs/v2.php
  RewriteCond %{REQUEST_FILENAME} !/robots.txt
  RewriteCond %{REQUEST_FILENAME} !/updater/
  RewriteCond %{REQUEST_FILENAME} !/ocs-provider/
  RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
  RewriteRule . index.php [PT,E=PATH_INFO:$1]
  RewriteBase /
  <IfModule mod_env.c>
    SetEnv front_controller_active true
    <IfModule mod_dir.c>
      DirectorySlash off
    </IfModule>
  </IfModule>
</IfModule>

开启 HTTPS

证书申请

在阿里云申请免费 ssl 证书,这里不展开讲。证书申请通过后,下载对应版本的证书,本例为 apache ,选择下载 apache 版本的证书,下载下来是一个压缩包文件。

证书部署

安装 openssl、mod_ssl:

sudo yum install -y openssl
sudo yum install -y mod_ssl

在 apache 安装目录新建cert目录:

sudo mkdir /etc/httpd/cert

把证书压缩包上传到/etc/httpd/cert,然后解压,得到三个文件:

  • mtycho.com_chain.crt
  • mtycho.com.key
  • mtycho.com_public.crt

解压后的文件名前带有数字,推荐去掉数字修改为上述形式,方便使用:

cd /etc/httpd/cert
sudo mv ***mtycho.com_chain.crt mtycho.com_chain.crt

修改 nextcloud 虚拟主机文件:

sudo vim /etc/httpd/conf.d/nextcloud.conf

在原基础上添加如下内容:

<VirtualHost *:443>
    ServerName  www.mtycho.com
    DocumentRoot  /var/www/html/nextcloud/
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
    SSLHonorCipherOrder on
    SSLCertificateFile /etc/httpd/cert/mtycho.com_public.crt    #此行及以下两行填写证书对应文件路径
    SSLCertificateKeyFile /etc/httpd/cert/mtycho.com.key 
    SSLCertificateChainFile /etc/httpd/cert/mtycho.com_chain.crt
  <Directory /var/www/html/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>

  </Directory>
</VirtualHost>

域名需要修改为自己的域名

重启 apache:

sudo service httpd restart

放行443/tcp端口:

sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload

此时可以通过 https 访问 nextcloud。

证书对应域名 A 记录要指向 Nextcloud 服务器 IP

设置 HTTP 重定向

修改 nextcloud 虚拟主机文件:

sudo vim /etc/httpd/conf.d/nextcloud.conf

<VirtualHost *:80>段中添加如下配置:

Redirect permanent / https://domain_name/ #domain_name 为当前使用的域名

重启 apache:

sudo service httpd restart

启用 HSTS

修改 nextcloud 虚拟主机文件:

sudo vim /etc/httpd/conf.d/nextcloud.conf

<VirtualHost *:443>段中添加如下配置:

<IfModule mod_headers.c>
   Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

重启 apache:

sudo service httpd restart

到这里,Nextcloud 优化就已经完成了,当然,还有其他优化项可以进行优化,例如开启 HTTP2 等,建议查找相关资料,这里不涉及。

Last modification:April 18th, 2020 at 09:21 pm