强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

03 - 配置详解

03 - 配置详解

深入理解 Nextcloud 配置文件结构、核心参数、安全配置、性能调优、缓存与日志管理。


3.1 配置文件结构

Nextcloud 的配置文件位于 config/config.php,采用 PHP 数组格式:

/var/www/nextcloud/
├── config/
│   ├── config.php          # 主配置文件(核心参数)
│   ├── config.sample.php   # 配置示例文件
│   └── autoconfig.php      # 自动安装配置(安装后删除)

配置文件优先级

1. config.php              ← 最高优先级(手动配置)
2. 环境变量                 ← 某些参数支持环境变量覆盖
3. 数据库中的 appconfig     ← 应用级配置
4. 默认值                   ← 代码内置默认值

3.2 config.php 核心参数

基础配置

<?php
$CONFIG = array(
    // ======== 基础信息 ========
    'instanceid' => 'oc1a2b3c4d5e',     // 实例唯一 ID(自动生成)
    'passwordsalt' => 'xxxxxxxxxx',       // 密码盐值(自动生成)
    'secret' => 'xxxxxxxxxx',             // 加密密钥(自动生成)
    'version' => '29.0.4.1',             // 当前版本(自动更新)
    'installed' => true,                  // 是否已安装

    // ======== 可信域名 ========
    'trusted_domains' => array(
        0 => 'cloud.example.com',
        1 => '192.168.1.100',
        2 => 'nextcloud.lan',
    ),

    // ======== 数据目录 ========
    'datadirectory' => '/var/www/nextcloud/data',
    // 生产环境建议移到 Web 根目录外:
    // 'datadirectory' => '/data/nextcloud-data',

    // ======== 数据库配置 ========
    'dbtype' => 'mysql',                  // mysql / pgsql / sqlite
    'dbname' => 'nextcloud',
    'dbuser' => 'ncuser',
    'dbpassword' => 'StrongPassword123!',
    'dbhost' => 'localhost',              // 或 '127.0.0.1:3306'
    'dbtableprefix' => 'oc_',             // 表前缀
    // MySQL 特定配置
    'mysql.utf8mb4' => true,              // 启用完整 UTF-8 支持
);

URL 与协议配置

    // ======== URL 配置 ========
    'overwriteprotocol' => 'https',       // 强制使用 HTTPS
    'overwrite.cli.url' => 'https://cloud.example.com',
    'overwritehost' => 'cloud.example.com',
    'overwritewebroot' => '',             // 如果部署在子路径下,设为 '/nextcloud'
    'overwritecondaddr' => '^10\.0\.0\.1$', // 仅对指定代理 IP 生效
    'trusted_proxies' => array(
        '10.0.0.1',                       // 反向代理 IP
        '172.16.0.0/12',                  // 支持 CIDR
    ),

维护模式

    // ======== 维护模式 ========
    'maintenance' => false,               // 设为 true 进入维护模式
    'maintenance_window_start' => 1,      // 自动维护窗口开始时间(UTC,0-23)
    // 设置后,cron 任务仅在该时间窗口内运行密集操作

3.3 安全配置

密码策略

    // ======== 密码安全 ========
    'auth.bruteforce.protection.enabled' => true,  // 暴力破解防护
    'passwordsalt' => 'unique-salt-here',           // 不要手动修改

    // 登录尝试限制
    'ratelimit.protection.enabled' => true,

    // 最小密码长度(通过管理后台设置)
    // 密码复杂度策略通过 Security app 配置

安全头配置

    // ======== HTTP 安全头 ========
    'default_phone_region' => 'CN',       // 默认电话区域
    'allow_user_to_change_display_name' => true,

    // CSP(Content Security Policy)相关
    // 通常通过 Web 服务器配置(见第 02 章 Nginx 配置)

敏感文件保护

    // ======== 安全增强 ========
    'check_for_working_htaccess' => true,  // 检查 .htaccess 是否生效
    'forwarded_for_headers' => array(
        'HTTP_X_FORWARDED_FOR',
    ),

登录安全

    // ======== 登录配置 ========
    'default_language' => 'zh_CN',        // 默认语言
    'default_locale' => 'zh_CN',          // 默认区域
    'remember_login_cookie_lifetime' => 60*60*24*15, // 记住登录 15 天(秒)

    // Token 过期
    'token_lifetime' => 60 * 60 * 24,     // API Token 有效期(24 小时)

3.4 性能配置

内存缓存

    // ======== 缓存配置 ========
    // 使用 APCu 作为本地缓存
    'memcache.local' => '\\OC\\Memcache\\APCu',

    // 使用 Redis 作为分布式缓存(文件锁 + 会话缓存)
    'memcache.distributed' => '\\OC\\Memcache\\Redis',
    'memcache.locking' => '\\OC\\Memcache\\Redis',

    // Redis 连接配置
    'redis' => array(
        'host' => 'localhost',           // 或 '/var/run/redis/redis.sock'
        'port' => 6379,
        'password' => 'RedisPassword123!',
        'dbindex' => 0,
        'timeout' => 1.5,
    ),

缓存类型对比:

缓存类型适用场景说明
APCu单机本地缓存最快,仅限本机
Redis分布式缓存、文件锁支持多机共享
Memcached分布式缓存功能较 Redis 少
XCache已弃用不推荐

文件锁

    // 文件锁防止并发写入冲突
    // 必须配置 Redis 才能高效使用
    'filelocking.enabled' => true,
    'memcache.locking' => '\\OC\\Memcache\\Redis',

任务调度优化

    // ======== 后台任务 ========
    // 推荐使用 cron 或 systemd timer
    'backgroundjobs_mode' => 'cron',

    // 预览生成设置
    'preview_max_x' => 1024,
    'preview_max_y' => 1024,
    'preview_max_scale_factor' => 1,

3.5 日志配置

基础日志配置

    // ======== 日志配置 ========
    'log_type' => 'file',                 // file / syslog / errorlog
    'logfile' => '/var/log/nextcloud/nextcloud.log',
    'loglevel' => 2,                      // 0=DEBUG, 1=INFO, 2=WARNING, 3=ERROR, 4=FATAL
    'logdateformat' => 'Y-m-d H:i:s',
    'logtimezone' => 'Asia/Shanghai',
    'log_rotate_size' => 104857600,       // 100MB 后轮转

日志级别说明:

级别数值说明适用场景
DEBUG0详细调试信息开发/排障
INFO1一般信息测试环境
WARNING2警告信息生产环境推荐
ERROR3错误信息最小日志
FATAL4致命错误

Syslog 配置

    // 使用 syslog(便于集中日志管理)
    'log_type' => 'syslog',
    'syslog_tag' => 'Nextcloud',
    'syslog' => array(
        'facility' => LOG_USER,
    ),

日志审查

    // 审计日志(需安装 Audit app)
    'log.condition' => array(
        'shared_secret' => 'SomeSecretToken',
        'apps' => array('files_sharing'),
    ),

日志管理命令

# 查看最近日志
sudo -u www-data php /var/www/nextcloud/occ log:file

# 调整日志级别
sudo -u www-data php /var/www/nextcloud/occ config:system:set loglevel --value=2

# 清理旧日志
sudo -u www-data php /var/www/nextcloud/occ log:manage --expire=30

3.6 应用配置

应用管理命令

# 列出所有应用
sudo -u www-data php /var/www/nextcloud/occ app:list

# 启用应用
sudo -u www-data php /var/www/nextcloud/occ app:enable calendar

# 禁用应用
sudo -u www-data php /var/www/nextcloud/occ app:disable activity

# 安装应用
sudo -u www-data php /var/www/nextcloud/occ app:install richdocuments

# 更新应用
sudo -u www-data php /var/www/nextcloud/occ app:update --all

3.7 配置管理命令

# 获取配置值
sudo -u www-data php /var/www/nextcloud/occ config:system:get trusted_domains

# 设置配置值
sudo -u www-data php /var/www/nextcloud/occ config:system:set maintenance --value=true

# 删除配置值
sudo -u www-data php /var/www/nextcloud/occ config:system:delete memcache.local

# 列出所有系统配置
sudo -u www-data php /var/www/nextcloud/occ config:list system

# 列出所有应用配置
sudo -u www-data php /var/www/nextcloud/occ config:list

3.8 多实例配置

在同一服务器上运行多个 Nextcloud 实例:

/var/www/
├── nextcloud-prod/     # 生产实例
│   └── config/config.php   (instanceid: oc_prod)
├── nextcloud-test/     # 测试实例
│   └── config/config.php   (instanceid: oc_test)
/data/
├── nextcloud-prod-data/
└── nextcloud-test-data/

每个实例需要独立的:

  • 数据库(不同 dbname 或不同数据库服务器)
  • 数据目录
  • instanceid
  • Redis dbindex(如 dbindex => 0dbindex => 1

3.9 注意事项

  1. 不要手动修改 secret 和 passwordsalt: 这些值在安装时自动生成,修改会导致已加密数据无法解密
  2. config.php 备份: 每次修改前备份 cp config.php config.php.bak
  3. 缓存变更后清理: 修改缓存配置后执行 occ maintenance:repair
  4. 日志权限: 确保日志目录对 www-data 用户可写
  5. 生产环境日志级别: 建议使用 WARNING(2),DEBUG 级别会生成大量日志
  6. Redis 密码: 生产环境务必为 Redis 设置密码

3.10 扩展阅读


上一章: 02 - 安装部署 下一章: 04 - 数据库管理 — 数据库选型、优化与运维。