二:nextcloud27最全面优化与解决各种安全警告

NEXCLOUD优化

PHP配置环境变量

找到www.conf文件,ubuntu位于 /etc/php/8.2/fpm/pool.d

vim /etc/php/8.2/fpm/pool.d/www.conf

如果使用env | grep $PATH能打印出环境变量只需要

**取消注释 clear_env = no**即可

否则自己手动先配置环境变量吧(略)

重启PHP

任何对php做出的修改都使用以下命令重启

首先

ps aux|grep php-fpm

image-20240115152736976

使用kill命令

kill -USR2  33166

最大上传大小与内存限制

PHP-FPM

如果您想增加最大上传大小,您还必须修改 您的 php-fpm 配置并增加 upload_max_filesizepost_max_size 值。并且修改最大内存大小memory_limit.您需要重新启动 php-fpm 和您的 HTTP 服务器以便应用这些更改。

参考值可根据 pmcalculator 计算得出

vim /etc/php/8.2/fpm/php.ini
; https://php.net/upload-max-filesize
upload_max_filesize = 20G

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 5

; https://php.net/memory-limit
memory_limit = 7168M

max_input_time = -1
max_execute_time = 3600

NGINX

修改nginx的nextcloud.conf 配置中的最大上传大小即可

vim /etc/nginx/conf.d/nextcloud.conf
        # set max upload size
        client_max_body_size 0;

抑制日志消息

如果您在日志文件中看到无意义的消息,例如 ,请将此部分添加到 你的 nginx 配置来抑制它们:client denied by server configuration: /var/www/data/htaccesstest.txt

location = /data/htaccesstest.txt {
  allow all;
  log_not_found off;
  access_log off;
}

请求头相关问题

vim /etc/nginx/conf.d/nextcloud.conf

在HTTPS配置块中增添以下内容 add_header Strict-Transport-Security max-age=15552000;

        add_header Strict-Transport-Security 'max-age=15552000' always;
        add_header Referrer-Policy                   "no-referrer"       always;
        add_header X-Content-Type-Options            "nosniff"           always;
        add_header X-Frame-Options                   "SAMEORIGIN"        always;
        add_header X-Permitted-Cross-Domain-Policies "none"              always;
        add_header X-Robots-Tag                      "noindex, nofollow" always;
        add_header X-XSS-Protection                  "1; mode=block"     always;

image-20240115151536831

重载nginx

systemctl reload nginx

缺失国际区号与默认地域

vim /var/www/nextcloud/config/config.php

添加如下语句

 'default_phone_region' => 'CN',
 'default_language' => 'zh_CN',
 'default_locale' => 'zh',

不被信任的域名

vim /var/www/nextcloud/config/config.php

添加该域名即可

  #受信任的域名
  'trusted_domains' => 
  array (
    0 => '10.0.0.2',
    1 => '10.1.1.20',
    2 => 'nc6.example.com',
    3 => 'hnc6.example.com',
    4 => 'nc4.example.com',
  ),

您的网页服务器未正确设置以解析“/.well-known/**”

编辑nginx配置文件,修改well-know相关

    location ^~ /.well-known {

            location = /.well-known/webfinger   { return 301 $scheme://$host:11224/index.php/.well-known/webfinger; }
            location = /.well-known/nodeinfo    {return 301 $scheme://$host:11224/index.php/.well-known/nodeinfo;}

            location = /.well-known/carddav     { return 301 $scheme://$host:11224/remote.php/dav/; }
            location = /.well-known/caldav      { return 301 $scheme://$host:11224/remote.php/dav/; }

            try_files $uri $uri/ =404;
        }

编辑 vim /var/www/nextcloud/config/config.php

主域名一定使用本机的,原因在于安装时使用了代理服务器域名

'overwrite.cli.url' => 'https://10.0.0.2:11224',

40069:当端口不是80或者443并且在安装时使用代理的域名时会出现此问题,修改40069为对应的外部映射端口

或者使用 $server_port来代替

缺少PHP模块

缺啥补啥,或者全给他下了

sudo apt install -y php8.2-common php8.2-curl php8.2-xml php8.2-mbstring php8.2-gd php8.2-sqlite3 php8.2-mysql php8.2-bz2 php8.2-intl php8.2-ldap php8.2-imap php8.2-bcmath php8.2-gmp php8.2-apcu php8.2-imagick

优化内存缓存配置

官网推荐同时使用本地缓存和分布式缓存。推荐的缓存是APCu和Redis

apt install -y php8.2-apcu redis-server php8.2-redis

确认Redis是否正在运行:

ps ax | grep redis
netstat -tlnp | grep redis

Redis开始运行后,启用相应php模块:

你也可以手动在php.ini中添加以下内容,效果相同:

vim /etc/php/8.2/fpm/php.ini
; Redis php extension
extension=redis.so

开启apcu(php有php-fpm和php-cli两种运行方式,都要开启apcu,添加apc.enable_cli=1

vim /etc/php/8.2/fpm/conf.d/20-apcu.ini
apc.enable_cli=1
vim /etc/php/8.2/cli/php.ini
apc.enable_cli=1

按照上述的步骤重启PHP服务

开启apcu和redis

vim /var/www/nextcloud/config/config.php

添加如下内容

  'memcache.local' => 'OCMemcacheAPCu',
  'memcache.distributed' => 'OCMemcacheRedis',
  'memcache.locking' => 'OCMemcacheRedis',
  'redis' => [
  'host' => 'localhost',
  'port' => 6379],

添加 'memcache.distributed' => 'OCMemcacheRedis', 后会报错,不知为何,若报错删除即可

如果redis有密码,加上该参数即可'password' => '******'

重载nginx

systemctl reload nginx

优化 php-fpm 性能,提高页面加载效率

可在这个网站计算:https://spot13.com/pmcalculator/

优化www.conf配置文件,增加更多的进程来处理页面数据。

vim /etc/php/8.2/fpm/pool.d/www.conf

需要修改和添加的字段有:

# pm.max_children = 5
pm.max_children = 79

# pm.start_servers = 2
pm.start_servers = 19

#pm.min_spare_servers = 1
pm.min_spare_servers = 19

# pm.max_spare_servers = 3
pm.max_spare_servers = 59

数值越大,进程越多,平均每个进程消耗 32M-96M 内存,按需设置

设置成功后重启 nextcloud 服务即可。

504 Gateway Time-out

vim /etc/nginx/conf.d/nextcloud.conf

在 nginx 配置文件钟添加以下语句即可解决

fastcgi_read_timeout 86400;

重启nginx或者重新加载配置文件

nginx -s reload

存在错误日志

日志路径位于nextcloud/data/ 目录下

vim /var/www/nextcloud/data/nextcloud.log

php-imagick 模块不支持 SVG

可以直接用以下步骤即可

 apt install libmagickcore-6.q16-6-extra

重启nginx

systemctl restart nginx

nextcloud无法访问应用商店

#在config.php中增加以下配置

vim /var/www/nextcloud/config/config.php
'appstoreenabled' => true,
'appstoreurl' => 'https://www.orcy.net/ncapps/v2/',

视频预览与缩略图并配置imaginary

在应用商店下载Preview Generator 插件并将其启用(通过正确配置可以预生成预览文件,减少系统负载)

首先生成所有预览(必须下载Preview Generator),如若文件很多,将会耗费较长时间

cd /var/www/nextcloud
sudo -u www-data php occ Preview:generate-all -vvv

其次将Preview:pre-generate添加到cron作业中

cd /var/www/nextcloud
sudo -u www-data php occ preview:pre-generate

构建imaginary服务

手动构建

创建并编辑docker-compose.yml

version: '3.1'

services:
  aio-imaginary:
    image: docker.io/nextcloud/aio-imaginary:latest
    restart: always
    environment:
      - PORT=9000
    ports:
      - "172.18.0.10:9000:9000"
    command: 
      - -concurrency 50
      - -enable-url-source
      - -log-level debug

之后在当前文件夹下执行docker compose up -d即可

宝塔1panel构建

image-20240117112813661

apt install libmagickcore-6.q16-6-extra
apt install ffmpeg
vim /var/www/nextcloud/config/config.php
'enable_previews' => true,
'enabledPreviewProviders' =>
 array (
    0 => 'OC\Preview\TXT',
    1 => 'OC\Preview\MarkDown',
    2 => 'OC\Preview\OpenDocument',
    3 => 'OC\Preview\PDF',
    4 => 'OC\Preview\MSOffice2003',
    5 => 'OC\Preview\MSOfficeDoc',
    6 => 'OC\Preview\PDF',
    7 => 'OC\Preview\Image',
    8 => 'OC\Preview\Photoshop',
    9 => 'OC\Preview\TIFF',
   10 => 'OC\Preview\SVG',
   11 => 'OC\Preview\Font',
   12 => 'OC\Preview\MP3',
   13 => 'OC\Preview\Movie',
   14 => 'OC\Preview\MKV',
   15 => 'OC\Preview\MP4',
   16 => 'OC\Preview\AVI',
   17 => 'OCPreviewEMF',
   18 => 'OC\Preview\Krita',
   19 => 'OC\Preview\Imaginary',
 ),

 'preview_imaginary_url' => 'http://imaginary:9000',
 #缩略图为webp格式
 'preview_format' => 'webp',

预览图像的默认 WebP 质量设置为“80”。将其更改为30,加快加载速度:

cd /var/www/nextcloud
sudo -u www-data php occ config:app:set preview webp_quality --value="30"

之后可以很明显的感觉到加载图片速度变快了,也可以预览视频图片

设置cron定时任务

image-20240115151601953

vim /etc/systemd/system/nextcloudcron.service
[Unit]
Description=Nextcloud cron.php job
 
[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
 
[Install]
WantedBy=basic.target
vim /etc/systemd/system/nextcloudcron.timer
[Unit]
Description=Run Nextcloud cron.php every 7 minutes
 
[Timer]
OnBootSec=7min
OnUnitActiveSec=7min
Unit=nextcloudcron.service
 
[Install]
WantedBy=timers.target
systemctl enable --now nextcloudcron.timer	

电子邮件配置

image-20240115151630965

数据库优化

具体优化性能以硬件标准为准

vim /etc/php/8.2/fpm/conf.d/20-mysqli.ini

最底下加入以下内容:

[mysql]
mysql.allow_local_infile=On
mysql.allow_persistent=On
mysql.cache_size=2000
mysql.max_persistent=-1
mysql.max_links=-1
mysql.default_port=
mysql.default_socket=/run/mysqld/mysqld.sock 
mysql.default_host=
mysql.default_user=
mysql.default_password=
mysql.connect_timeout=60
mysql.trace_mode=Off

编辑 mariadb.cnf 文件:

vim /etc/mysql/mariadb.cnf

加入以下内容:

[server]
skip_name_resolve = 1
innodb_buffer_pool_size = 128M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
query_cache_type = 1
query_cache_limit = 2M
query_cache_min_res_unit = 2k
query_cache_size = 64M
tmp_table_size= 64M
max_heap_table_size= 64M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_large_prefix=on
innodb_file_format=barracuda
innodb_file_per_table=1

重启mysql与nginx

突破内网上传上限

更改上传块大小

cd /var/www/nextcloud
sudo -u www-data php occ config:app:set files max_chunk_size --value 0

如果遇到设置为0不能上传的问题,请设置为一个特别大的值即可

您的远端地址识别为***,且目前正受到强力限制,导致降低了各种请求的性能。

image-20240115151707067

根本原因:在登陆时,使用代理服务输入了错误的密码,触发了暴力保护,最简单的解决方法是注销重新用正确账户密码登录一次即可。或者使用如下的方式,将该代理服务ip加入暴力破解白名单即可。

官网解释

暴力保护
Nextcloud 具有针对暴力破解尝试的内置保护。这可以保护您的系统免受攻击者尝试,例如尝试许多不同的密码。

Nextcloud 上默认启用暴力保护。

怎么运行的
暴力保护最容易在登录页面上看到。如果您尝试使用无效的用户名和/或密码首次登录,您将不会注意到任何内容。但如果您这样做几次,您就会开始注意到每次登录验证所需的时间都更长。这就是强力保护的作用。

最大延迟为 25 秒。

成功登录后,尝试次数将被清除。一旦用户通过正确的身份验证,他们将不再受到延迟的影响。

暴力保护和负载均衡器/反向代理
如果您使用反向代理或负载均衡器,请务必确保其设置正确。特别是config.php 中的trusted_proxies和forwarded_for_headers 变量需要正确设置。否则,Nextcloud 实际上可能会开始限制来自反向代理或负载均衡器的所有流量。有关详细信息,请参阅反向代理。

从暴力保护中排除 IP 地址
可以将 IP 地址排除在暴力保护之外。

启用暴力设置应用程序

以管理员身份登录并转到管理设置 -> 安全

警告

请注意,任何排除的 IP 地址都可以执行身份验证尝试,而不会受到任何限制。最好排除尽可能少的 IP 地址,甚至根本不排除。

image-20240115151722257

启用 Brute-force settings 应用程序

image-20240115152748365

在 安全 选项卡中,添加暴力破解ip白名单即可

image-20240115151731423

config.php完整配置如下

<?php
$CONFIG = array (
  'instanceid' => 'ocpvn710jx5a',
  'passwordsalt' => '2MOt/7l5TVhHAuken/qn3KIpVEk8jp',
  'secret' => 'mGG1LUm+h9sItuZKSY9oSJ16xx28otdRvTodoxjEVFhenVaz',
  #受信任的域名
  'trusted_domains' => 
  array (
    0 => '10.0.0.2',
    1 => '10.1.1.20',
    2 => 'nc6.example.com',
    3 => 'hnc6.example.com',
    4 => 'nc4.example.com',
  ),
  'datadirectory' => '/var/www/nextcloud/data',
  'version' => '27.1.4.1',
  #主域名
  'overwrite.cli.url' => 'https://10.0.0.2',

  #数据库信息
  'dbtype' => 'mysql',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'glxaa',
  'dbpassword' => '123456',
  'installed' => true,
  'default_phone_region' => 'CN',
  'default_language' => 'zh_CN',
  'default_locale' => 'zh',
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => 
  array (
    'host' => 'localhost',
    'port' => 6379,
  ),
  #配置预加载,缩略图
  'enable_previews' => true,
  'enabledPreviewProviders' => 
  array (
    0 => 'OC\Preview\TXT',
    1 => 'OC\Preview\MarkDown',
    2 => 'OC\Preview\OpenDocument',
    3 => 'OC\Preview\PDF',
    4 => 'OC\Preview\MSOffice2003',
    5 => 'OC\Preview\MSOfficeDoc',
    6 => 'OC\Preview\PDF',
    7 => 'OC\Preview\Image',
    8 => 'OC\Preview\Photoshop',
    9 => 'OC\Preview\TIFF',
    10 => 'OC\Preview\SVG',
    11 => 'OC\Preview\Font',
    12 => 'OC\Preview\MP3',
    13 => 'OC\Preview\Movie',
    14 => 'OC\Preview\MKV',
    15 => 'OC\Preview\MP4',
    16 => 'OC\Preview\AVI',
    17 => 'OC\Preview\EMF',
  ),

image-20240115152248307

  #配置应用商店国内代理
  'appstoreenabled' => true,
  'appstoreurl' => 'https://www.orcy.net/ncapps/v2/',
  'twofactor_enforced' => 'false',
  'twofactor_enforced_groups' => 
  array (
  ),
  'twofactor_enforced_excluded_groups' => 
  array (
  ),
);

优化后安全检查结果

image-20240115151918261

一:nextcloud27+nginx +ssl+各种优化+双栈的傻瓜式安装教程

二:nextcloud27最全面优化与解决各种安全警告

三:nextcloud27+nginx 使用家庭公网ipv6+云服务器公网ipv4配置双栈并将特定的请

四:解决nextcloud无法播放avi、mkv等视频格式的问题

五:解决nextcloud无法在线预览markdown文件内的网络图片得到问题

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>