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 后轮转
日志级别说明:
| 级别 | 数值 | 说明 | 适用场景 |
|---|---|---|---|
| DEBUG | 0 | 详细调试信息 | 开发/排障 |
| INFO | 1 | 一般信息 | 测试环境 |
| WARNING | 2 | 警告信息 | 生产环境推荐 |
| ERROR | 3 | 错误信息 | 最小日志 |
| FATAL | 4 | 致命错误 | — |
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 => 0和dbindex => 1)
3.9 注意事项
- 不要手动修改 secret 和 passwordsalt: 这些值在安装时自动生成,修改会导致已加密数据无法解密
- config.php 备份: 每次修改前备份
cp config.php config.php.bak - 缓存变更后清理: 修改缓存配置后执行
occ maintenance:repair - 日志权限: 确保日志目录对
www-data用户可写 - 生产环境日志级别: 建议使用 WARNING(2),DEBUG 级别会生成大量日志
- Redis 密码: 生产环境务必为 Redis 设置密码
3.10 扩展阅读
上一章: 02 - 安装部署 下一章: 04 - 数据库管理 — 数据库选型、优化与运维。