常见问题及其解决方案
在进行故障排除时,您可能需要引用 FOSSBilling 生成的日志。 这些文件的位置可以在我们的 FAQ。
HTTP 错误 404
子文件夹安装
如果您尝试使用子文件夹而不是子域名运行 FOSSBilling 的安装,即https://myfancyhost.com/fossbilling
而不是https://fossbilling.myfancyhost.com
那么它就不起作用了。
FOSSBilling 0.4.2 中不建议对子文件夹安装的支持。它们目前不受支持,将来可能会也可能不会返回。请确保您的 FOSSBilling 安装在您网站的根文件夹中,即 public_html,并且您有一个指向它的工作子域名 DNS 记录。
Apache, LiteSpeed, 或 OpenLiteSpeed
如果您使用的是 Apache、LiteSpeed 或 OpenLiteSpeed,并且在尝试访问部分 FOSSBilling 时收到 HTTP 404 错误,请检查以下故障排除步骤:
- 确保您已安装并启用 mod_rewrite。
- 验证与 FOSSBilling index.php 文件在同一目录中是否有有效的 .htaccess 文件。
- 如果您确实有有效的 .htaccess 文件,请验证它是否与默认的 FOSSBilling 文件匹配。
- 对于那些正在使用 OpenLiteSpeed 的人,您需要在加载新的 .htaccess 文件并生效之前重新启动 OpenLiteSpeed 服务或网络服务器。
- 如果您检查了上述所有内容,请重新启动您的网络服务器。在重新加载服务之前,不会应用一些配置更改,重新启动服务器将确保一切都有机会重新加载。
Apache
- 确保您有启用 AllowOverride All。
- 请在 Stack Overflow 上的这篇文章中了解如何启动。
Cloudflare 某些问题
一些 Cloudflare 功能可能会导致 FOSSBilling 中的问题,以下是功能及其造成的任何已知问题的列表
Auto Minify
- 使用 Cloudflare 启用“自动最小化”功能可能会导致管理面板中的问题,特别是与文件完整性检查相关的问题。这将导致JS和CSS文件不再加载到您的Web浏览器中,并且管理员面板无法使用。如果此问题影响您,您的浏览器应该显示这样的错误:完整性属性中的“sha384”散列都与子资源的内容不匹配。
- 这个问题的解决方案是简单地禁用“自动最小化”功能。
权限问题
如果您收到与权限相关的错误(例如 config.php 文件或缓存文件夹),这些故障排除步骤可能会有所帮助。
文件和文件夹权限
- 如果您正在使用带有“修复权限”按钮的控制面板,请先尝试
- 验证您网站的文件和文件夹是否应用了正确的权限。通常,755 适用于文件夹,644 适用于 PHP 文件。
- 在终端内和文档根目录下,您可以使用以下命令手动应用正确的权限:
find . -type d -exec chmod 755 {} \;
将 755 应用于所有文件夹。find . -type f -exec chmod 644 {} \;
将 644 应用于所有文件。
- 在终端内和文档根目录下,您可以使用以下命令手动应用正确的权限:
文件所有权
如果为文件分配了错误的所有者,那么即使分配了正确的文件权限(755),事情仍然无法正常工作。您可以使用以下步骤检查正确的自己:
- 创建一个新的 PHP 文件,并将以下内容放在其中:
<?php var_dump(get_current_user());?>
- 在您的网页浏览器中打开 PHP 文件。这应该输出用于执行 PHP 的用户,然后您可以使用它来修复网站的用户/组权限。
RHEL Linux (和衍生品)
那些使用 RHEL 派生 Linux 发行版(RHEL、CentOS、Rocky Linux、AlmaLinux)的人,您可能会发现,无论文件/文件夹权限如何,FOSSBilling 都无法创建文件。请尝试以下解决方案:
- 配置 SELinux 以允许 PHP(推荐)
- 确保您安装了 policycoreutils-python 软件包。
- 为文档根设置适当的上下文
- 注意:在执行之前,请检查以下代码片段中的路径。你的实际路径可能不同。
semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
restorecon -Rv /var/www/html
- 配置 SELinux 规则。
setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_sendmail on
- 安装
selinux-policy-devel 软件包
setsebool -P httpd_can_network_connect_db on
- 重新启动服务器
- 禁用 SELinux(不鼓励)
- 编辑
/etc/selinux/config
- 更改
SELINUX=enforcing
为SELINUX=disabled
并保存文件 - 重新启动服务器
- 编辑
未知的 “encore_entry_link_tags”函数。
当尝试在子文件夹(example.com/billing)下使用 FOSSBilling 时,会出现此错误。目前,我们不支持在子文件夹下安装 FOSSBilling,但我们确实打算改进稍后的路由处理方式,这应该可以解决这个问题。修复方法是将 FOSSBilling 安装到子域名(billing.example.com)。
更新后出现错误
如果您在更新后遇到错误,以下步骤可能会帮助您解决您遇到的任何问题。
- 查看更改日志,了解任何中断更改或所需的任何手动操作。
- 尝试使用回退补丁程序,以确保所有补丁都已正确应用,方法是导航到
yourdomain.com/run-patcher
- 如果您必须使用回退修补程序,这表明可能存在权限问题,导致更新过程中途停止。我们建议检查故障排除部分的权限问题。
- 如果您仍然遇到问题,您可以通过我们的论坛、Discord 或错误报告寻求进一步的帮助。
Cron 问题
如果您在 FOSSBilling 仪表板中看到类似的消息,这意味着 cron 没有在15分钟或更长时间内运行,这是有问题的,因为 FOSSBilling 依靠此功能按预期工作。
注意: 默认情况下,FOSSBilling 包括一个回退 cron 行为,该行为将在 cron 自上次执行以来超过15分钟时运行&您访问管理员仪表板。因此,如果您看到此消息,然后去检查上次执行时间,这将是最近的&这并不意味着 cron 工作正常!
- 检查 FOSSBilling 错误日志中是否有任何错误。
- 如果 PHP 版本过时,FOSSBilling 将尝试提醒您,但在某些情况下,旧版本上较新的 PHP 功能会导致我们无法处理的 PHP 编译错误。请参阅解决这个问题的较低步骤。以下是这些错误的任何已知示例:
Cannot use 'final' as constant modifier
: 当 cron 使用较旧得 PHP 版本 8.1 运行时,会出现此错误。
- 如果 PHP 版本过时,FOSSBilling 将尝试提醒您,但在某些情况下,旧版本上较新的 PHP 功能会导致我们无法处理的 PHP 编译错误。请参阅解决这个问题的较低步骤。以下是这些错误的任何已知示例:
- 验证您是否正确配置了 cron,以便每5分钟运行一次。FOSSBilling 将在 cron 设置(/admin/extension/settings/cron)下显示一个 crontab 示例,其中包含您安装的正确路径
- 如果您使用的是多个用户的控制面板,请通过 CLI 登录您的用户帐户,然后输入 php -v,以查看您帐户下的默认 PHP 版本。如果它低于 FOSSBilling 的最低 PHP 版本,请按照以下步骤进行更正。
正在使用不正确的 PHP 版本
由于 cron 作为命令在主机服务器上执行,因此这些步骤与任何域无关,导致控制面板使用其默认或“系统”PHP 版本。通常,对于 FOSSBilling 来说,此版本可能太旧了(请参阅导致 cronjob 失败的系统要求)。
以下步骤可能有助于您解决这个问题:
- 如果您的控制面板为您提供了 cron 的 PHP 版本选择器,请使用它来选择一个符合 FOSSBilling 要求的版本。
- 尝试指定一个不同的 PHP 二进制文件用于 cron 作业(例如:/usr/bin/php8.1、php8.1 或 php81,而不是简单地使用 php)
- 删除任何小于 8.1 的 PHP 版本,以确保它不能使用不正确的版本。
- 联系控制面板的维护人员,以及如何为 cron 选择不同的 PHP 版本。
- 通过使用 wget 通过 cronjob 调用 API 端点或使用外部服务,切换到使用 cronjob API 端点。
- 注意: Cron 有时可能是长期运行的。调用 API 端点运行 cron 应该被视为最后的手段,因为您遇到超时的可能性更高。如果您要使用它,您应该考虑增加服务器上的超时限制。