宝塔面板下nextcloud完美优化配置

Linux, PHP 2018/03/26

这两天在宝塔面板下折腾nextcloud,遇到了很多问题,详见:宝塔面板部署NextCloud逐一解决后台安全及设置警告 ,这里再补充几点

一、性能优化

Nextcloud由于各种原因,默认安装后,任何页面加载时间都过于缓慢。之前的文章有介绍到使用PHP的APCu模块以提升缓存性能,这里再介绍使用Memcached提高Nextcloud的性能。

Nextcloud支持多个不同类型的缓存后端,所以可以同时启用本地缓存(APCu)和分布式缓存(Memcached、Redis),官方推荐的组合是APCu+Redis

分布式缓存选择Memcached、Redis其中一种启用即可,无需两者都启用

宝塔面板很方便的可以安装php的Memcached和Redis模块(注意是memcached,非memcache),这里我以APCu+Memcached为例

安装完毕后,打开/www/wwwroot/你的nextcloud目录/config/config.php,在其尾部添加以下代码

第1行为指定本地缓存为APCu,第2、3行为指定分布式缓存为Memcached

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
    array('localhost', 11211),
)

如图,注意分号,保存即可

Redis则需要稍微修改一下配置

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

二、Nginx配置

这一步最为蛋疼,官方给出的Nginx配置示例,有些是可以参考的,有些挪到宝塔上来则会有各种奇奇怪怪的问题,所以需要针对宝塔修改nextcloud下Nginx的配置。

经过几天的折腾,这部分终于也解决的差不多了。分享一下我的Nginx配置,为方便理解和阅读,我已在配置文件中加入一些注释,可以根据情况修改一下即可。

server
{
    #基础配置,这些可以照搬宝塔的配置
    listen 80;
    listen 443 ssl http2;
    server_name file.bugxia.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/file.bugxia.com;

    ssl_certificate    /etc/letsencrypt/live/file.bugxia.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/file.bugxia.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
	
    error_page 497 https://$host$request_uri;
    #nextcloud包含了403和404的错误页面
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;
	
    #HSTS、缓存设置
    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
    large_client_header_buffers 4 16k;
    client_max_body_size 10G; 
    fastcgi_buffers 64 4K;
    gzip off;
	
    #宝塔默认是include调用PHP相关配置,这里稍稍修改了一下,注意php版本
    #加入了front_controller_active这项参数以删除页面URL中的index.php
    location ~ [^/]\.php(/|$)
    {
        try_files $uri =404;
        fastcgi_pass  unix:/tmp/php-cgi-72.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
	include pathinfo.conf;
	fastcgi_param front_controller_active true;
    }

    #Let's Encrypt 证书续期验证目录
    location /.well-known/acme-challenge { }
	
    #nextcloud一些关键目录的权限设置
    location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
        deny all;
    }
    #静态资源重定向1
    location ~* \/core\/(?:js\/oc\.js|preview\.png).*$ {
        rewrite ^ /index.php last;
    }
    #webdav重定向
    location / {
        rewrite ^ /index.php$uri;
        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
        rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
        #静态资源重定向2,支持使用acme脚本在申请证书时对域名的验证
        if ($uri !~* (?:\.(?:css|js|svg|gif|png|html|ttf|woff)$|^\/(?:remote|public|cron|status|ocs\/v1|ocs\/v2)\.php|^\/\.well-known\/acme-challenge\/.*$)){
            rewrite ^ /index.php last;
        }
    }
	
    #静态资源重定向3
    location ~* \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }
    
    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }
	
    #对静态资源添加header
    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        access_log off;
    }
	
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
        expires      30d;
        access_log off; 
    }
    #access_log  /www/wwwlogs/file.bugxia.com.log;
}

参考:

https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html

https://serverfault.com/questions/845696/nginx-rewrite-nextcloud-index-php-in-url

本文标签:


2条评论

  • 言西 评论于

    博主为什么没有启用“`’memcache.locking’ => ‘\OC\Memcache\Redis’,“`这个内存锁定呢?

    • Bug侠 评论于

      @言西 唉,我都注意到这条,当初只是为了解决NC后台的提示。我去加上

    评论(*号为必填项)