在管理 Nextcloud 实例时,使用命令行运行以下指令以检查系统配置是否正确,是一项常规操作:

php occ setupchecks

但在某一部署环境中,这条命令卡在执行状态,迟迟无输出,也无错误提示;Web 页面上“后台设置”中的系统检查同样无法完成,界面持续转圈。

最终,这一问题仅由一处配置项引起:trusted_domains


问题表现

  • 命令 php occ setupchecks 无响应,终端挂起;
  • Web 界面 → 管理后台 → 系统检查 无法完成;
  • Web 服务反向代理(如 Nginx)已配置正确,.mjs 测试文件可通过浏览器与 curl 正常访问;
  • Apache .htaccess 及主配置文件中已声明 .mjs MIME 类型;
  • 无服务器负载异常,内存/CPU 正常。

一切看似运行良好,但检查命令却始终无法完成。


问题分析

Nextcloud 在执行 setupchecks 时,会验证 Web 服务器是否能正确响应特定文件(如 JavaScript 模块 .mjs),这通常通过内部 HTTP 请求实现。

此过程使用了 Nextcloud 的 CheckServerResponseTrait,其行为为:

遍历所有配置在 trusted_domains 中的域名和 IP,对每一个地址发起 HTTP 请求(如访问 .mjs 文件)。

如果某些地址无法访问、证书无效、反向代理未配置,或请求超时,这些失败会直接影响 CLI 工具的运行,导致整个 setupchecks 阻塞。


配置示例(问题前)

在配置文件 config.php 中,trusted_domains 项原本包含了大量条目:

'trusted_domains' => array (
0 => '192.168.x.x',
1 => 'internal.test.domain',
2 => 'legacy-domain.example',
...
45 => 'actual-used-domain.com',
),

其中大部分为局域网地址、已废弃域名、历史测试用途等,当前已无任何用途。

Nextcloud 在 CLI 中仍尝试访问所有这些域名/IP,当请求失败或超时时,程序无法继续,表现为命令挂起。


最终解决方案

唯一需要修改的配置项为

'trusted_domains' => array (
0 => 'actual-used-domain.com',
),

其余如 trusted_proxiesoverwritewebrootoverwrite.cli.url 等均保持默认值,无需更动。

修改配置后,重新执行:

sudo -u www-data php occ setupchecks

命令立即返回,各项检查顺利通过,后台界面也可正常显示检查结果。


总结建议

建议项说明
精简 trusted_domains仅保留实际访问所使用的域名
避免历史测试/局域网地址CLI 请求将尝试访问这些域名,失败即卡住
保持 overwrite.cli.url 与受信域名匹配保证 CLI 请求能通过验证
.mjs MIME 类型声明需存在.htaccess 或主 Apache 配置中应有相关 AddType 设置

此类问题隐蔽性强,但可通过日志、curl 请求、配置分析快速定位。一旦清除多余配置,Nextcloud 的自检机制即可正常运行。

Leave a Reply

Your email address will not be published. Required fields are marked *