28 - 周二 记一个关于本博客离奇的问题

-
-
2025-10-28 16:02

背景:    

        上周五,突然发现博客的搜索功能无响应,果断F12,一看发现笔记搜索接口返回403,遂开始排查。

一、TriliumNotes升级了,笔记搜索接口加了认证?

        403错误码,众所周知,是鉴权失败。

        第一反应,自然是去看@东东的小黑盒,毕竟这个站点主题是从东东大佬这拿来改的。进大佬博客一看,嗯,搜索功能没问题。于是推测,可能是版本不同,因为我版本比较新,难道是新版加了认证鉴权?果断开始搜索TriliumNotes的接口文档,试图找到认证方法。然,百度、github,都无果,由于这个项目之前经过一些变动,有些文档地址也变了,不知道里面有没有。

        找了一圈,只找到了功能类似的接口:ETAPi,这是TriliumNotes对外的接口。一试,可以。但是发现它不能限制搜索范围,而且会暴露token,虽然暴露token的问题可以通过反向代理(豆包的解决方案)解决,但是无法限制范围也是不可以的,毕竟不是所有的文章都是对外发布的,故此方案行不通。

         遂又回到了一开始的问题,鉴权?那就看看我的请求标头和东东大佬请求标头的差异,emmm,似乎没什么特别的,难道问题不在鉴权上?

二、Js版本不一致,缺少了鉴权?

        于是我又去看了东东大佬的github,发现有个关于搜索功能的更新,难道是我的文件版本是旧的?可是我js文件已经改动很多了,不想直接覆盖大佬的。于是我把整个站点重新导入,开启分享,访问分享链接,搜索,一气呵成,嘶,竟然可以了?难道找到原因了?对比具体的搜索逻辑,复制,粘贴,测试,一气呵成。嗯,又不行了。

        那差别在哪?一看地址栏,哦~原来如此。可以访问的那个,是我后台直接分享出来的,没有经过反向代理的,TriliumNotes的分享链接,而不能访问的,是反向代理后的,也就是再次反向代理到TriliumNotes分享链接的地址。

        不带任何多余参数,开启curl,果然,能访问的还是能访问,不能访问的还是不能访问。至此,排除鉴权因素影响。那么,就是反向代理的问题了。

三、反向代理错误了?

       不应该啊,能正常访问的,怎么会是代理问题?先看看日志,一看,嘿,不能访问的那个地址,到达nginx时,参数就已全部丢失了?这么奇怪。于是开始问豆包,豆包的第一回答:可能不是参数丢失了,而是日志记录不完全,并给出检查方式,即:修改日志格式,使请求参数显示在日志中。按着豆包提示,把能改的都改了,再访问,还是一样,既然如此,那就可以确定是确实丢失了参数。

        于是开始问豆包,可能出现问题的原因,并在豆包的指导下,把所有的文件都查了一遍,没用,又把文件给豆包排查了一遍,给了几个更改的点,改完还是没用,期间还出现了几次因为豆包的错误配置,导致服务器内存占用过大,OOM了。好在上次吃过这个亏,把docker自启动服务(我的博客就是挂在docker上的)关掉了,重启就可以了。

         严刑拷打豆包,还是没有可行的解决方案,迫于无奈,转向Deepseek,和豆包给的方向差不多,但是细节上远不如豆包。更没参考意义了。

        至此,实在是没有解决办法了。

四、使用中转进行替代

       于是试图让前端直接访问未经过反向代理的那个地址,以获取搜索结果,果不其然,跨域了。问豆包Trilium的跨域怎么解决,豆包给了个配置,一试,没用。

       算了,自己写个服务,中转一下,给自己允许一下跨域,OK,搞定。


目录