侧边栏壁纸
  • 累计撰写 9 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Halo

Administrator
2025-11-02 / 0 评论 / 1 点赞 / 81 阅读 / 0 字

Halo插件问题分析与解决方案

🧑‍💻 User

这是什么问题


🤖 Assistant

好的,我们来分析一下这份 Halo 博客系统的日志文件。

这份日志记录了 Halo 从启动到运行过程中发生的一系列事件,其中包含了正常的启动流程、插件的加载与更新,以及一些运行时的错误。

我将为你分点解析其中的主要问题:


问题总结

你的 Halo 实例(版本 2.21.9)遇到了几个不同类型的问题,主要分为两大类:

  1. 插件冲突与 Bug公告 (announcement) 插件存在 Bug,导致访问某些页面(如 足迹 (footprint) 插件的页面)时出现 500 服务器错误
  2. 插件配置错误图床 (PictureBed) 插件配置了错误的 Lsky Pro(兰空图床)地址和/或认证信息,导致无法连接图床服务,引发了大量的网络和认证错误。

除此之外,还有一些警告信息,虽然不致命,但也值得关注。


详细问题分析与解决方案

1. 严重错误 (ERROR)

问题一:插件冲突导致页面 500 错误
  • 错误日志片段
 halo | 2025-10-15T13:33:15.757+08:00 ERROR 7 --- [dedElastic-1791] a.w.r.e.AbstractErrorWebExceptionHandler : [f81a299b-1708] 500 Server Error for HTTP GET "/footprints"
 halo | org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'run.halo.app.theme.dialect.GlobalHeadInjectionProcessor'
 ...
 halo | Caused by: java.lang.NullPointerException: null
 ...
 halo | at cc.lik.announcement.process.AnnouncementProcess.buildScriptContent(AnnouncementProcess.java:103) ~[na:na]
  • 问题分析
  1. 当用户访问 /footprints 页面时,服务器返回了 500 内部错误。这个页面是由 footprint(足迹)插件提供的。
  2. 错误发生在 GlobalHeadInjectionProcessor 处理器中,这个处理器的作用是将各个插件需要注入到页面 <head> 标签中的内容(如 JS、CSS)合并进去。
  3. 根本原因(Caused by)是一个 NullPointerException(空指针异常),并且错误追溯到了 cc.lik.announcement.process.AnnouncementProcess 这个类。这明确指向了 announcement(公告)插件。
  4. 结论公告 插件在尝试向页面注入脚本时,由于内部 Bug 产生了一个空值,导致了整个页面渲染失败。这是一个典型的插件间冲突或插件自身 Bug 的问题。
  • 解决方案
  • 临时方案:进入 Halo 后台,禁用或卸载 公告 (announcement) 插件,这个问题应该就能立即解决。
  • 长期方案:向该插件的作者报告这个 Bug,并附上这段错误日志,等待作者修复后更新插件。
问题二:图床插件网络连接和认证失败

这个问题表现为多种不同的错误,但都指向同一个插件:PictureBed(图床),及其配置的 Lsky Pro 服务。

  • 错误类型 A:SSL 证书错误 (SSLHandshakeException)
  • 日志片段
 halo | org.springframework.web.reactive.function.client.WebClientRequestException: No subject alternative DNS name matching lsky.lyc1466.cn found.
 ...
 halo | Caused by: java.security.cert.CertificateException: No subject alternative DNS name matching lsky.lyc1466.cn found.
  • 分析:插件尝试通过 HTTPS 访问 lsky.lyc1466.cn,但服务器返回的 SSL 证书中并不包含 lsky.lyc1466.cn 这个域名。这是 SSL 握手失败的典型原因,客户端为了安全拒绝了连接。这说明 lsky.lyc1466.cn 的 SSL 证书配置有问题。
  • 错误类型 B:404 Not Found
  • 日志片段
 halo | org.springframework.web.reactive.function.client.WebClientResponseException$NotFound: 404 Not Found from GET http://192.168.0.6:1125/api/v1albums
  • 分析:插件尝试访问局域网地址 http://192.168.0.6:1125 上的 Lsky Pro API,但服务器返回了 404。这说明你配置的 API 地址不正确,服务器上没有 /api/v1albums 这个路径。
  • 错误类型 C:401 Unauthorized
  • 日志片段
 halo | org.springframework.web.reactive.function.client.WebClientResponseException$Unauthorized: 401 Unauthorized from GET http://192.168.0.6:1125/api/v1/albums
  • 分析:插件这次访问的 API 路径看起来是正确的(/api/v1/albums),但服务器返回了 401,表示未授权。这通常意味着插件配置中的 API Token(令牌)是错误的或已失效。
  • 错误类型 D:301 重定向和内容类型错误
  • 日志片段
 halo | WebClientResponseException: 301 Moved Permanently from GET http://lsky.lyc1466.cn/api/v1/albums, but response failed with cause: org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'text/html' not supported
  • 分析:插件尝试用 http 访问 lsky.lyc1466.cn,服务器返回了 301 重定向(很可能是重定向到 https)。客户端跟随重定向后,最终收到的响应是 text/html(一个网页),而不是插件期望的 application/json(API 数据)。这导致解析失败。
  • 综合结论与解决方案
    PictureBed 插件的配置存在严重问题。你似乎在不同的时间点尝试了不同的配置(一个公网域名 lsky.lyc1466.cn 和一个局域网 IP 192.168.0.6:1125),但都失败了。
  1. 检查 Lsky Pro 服务地址:确保你在插件中填写的地址是 Lsky Pro 的正确 API 地址,而不是首页地址。通常应该是 https://your-domain.comhttp://ip:port 的形式,插件会自动拼接 API 路径。
  2. 检查 Lsky Pro 版本:确保你使用的 Lsky Pro 版本与 PictureBed 插件兼容。API 路径可能因版本而异(例如 /api/v1/)。
  3. 检查 API Token:在 Lsky Pro 后台重新生成一个 API Token,并确保正确填写到插件的配置中。
  4. 检查网络和证书
  • 如果你使用公网域名,请确保该域名的 SSL 证书是有效的,并且包含了正确的域名。
  • 如果你使用局域网 IP,请确保 Halo 容器可以访问到 192.168.0.6 这个地址。
  • 操作建议:进入 Halo 后台 -> 插件 -> PictureBed 插件设置,仔细核对并修正以上配置项。

2. 警告信息 (WARN)

这些问题不会导致程序崩溃,但值得了解。

  • Optimistic locking failure when reconciling request
  • 分析:这是一个并发控制的警告。意味着在同一时间有多个线程尝试更新同一个资源(比如一篇帖子或一个插件的状态),其中一个失败了但会自动重试。这在 Halo 2.0 的架构中是可能发生的,通常不需要担心。如果频繁出现,可能表示系统负载较高。
  • No subject alternative DNS name matching...
  • 分析:同上面的 SSL 错误,这是连接到外部服务时发生的证书验证失败。
  • 'maxHistory' is not set, ignoring 'totalSizeCap' option
  • 分析:这是日志滚动策略的配置警告。建议在日志配置文件中设置 maxHistory(保留的旧日志文件数量),这样 totalSizeCap(日志总大小限制)才能生效。
  • please remove commons-logging.jar from classpath
  • 分析:这是一个常见的 Spring Boot 日志依赖冲突警告,通常可以安全忽略,不会影响程序运行。

总结与行动步骤

  1. 首要步骤:登录 Halo 后台,进入 插件 列表,停用 公告 (announcement) 插件。这应该能解决你网站首页或部分页面打不开(500 错误)的问题。
  2. 第二步:找到 图床 (PictureBed) 插件,进入其设置页面。仔细检查并修正 Lsky Pro 的 URLAPI Token。如果不确定,可以先停用该插件,以停止日志中不断刷新的错误信息。
  3. (可选) 如果你想让日志更干净,可以根据警告信息调整 Halo 的启动参数和日志配置。

总的来说,你的 Halo 核心服务运行正常,但有几个插件存在 Bug 或配置错误,导致了这些连锁反应。解决这些插件问题后,你的博客应该就能恢复正常。

博主关闭了所有页面的评论