自建 SearXNG 元搜索引擎:零追踪搜索,并为 Open WebUI 和 LobeHub 开启联网搜索

用 Zenavo 模板在自己的服务器上部署 SearXNG 隐私元搜索引擎,开启 JSON 接口,并通过项目私有网络接入 Open WebUI 与 LobeHub,无需按次付费即可让大模型用上实时联网搜索。

本文亦提供 English、繁體中文、日本語、Español 和 Bahasa Indonesia。

搭好 Open WebUI 或 LobeHub 之后,大家很快就会遇到同一个需求:怎么让模型查今天的新闻、最新的文档或网页信息? 接商业搜索 API(如 Tavily、Serper、Brave Search)通常要绑卡按次计费,而直接用公共 SearXNG 实例又经常因为限流报错。

SearXNG 是一个开源的元搜索引擎:它自己不建全网索引,而是替你并发查询 Google、Bing、DuckDuckGo、Wikipedia、GitHub 等几十个搜索源,汇总去重后返回结果,不记录你的搜索画像。更实用的是,把它和 Open WebUI 或 LobeHub 放进同一个 Zenavo 项目里,就能直接走私有网络免费给 AI 提供联网搜索。

1. 两种部署方式:独立使用,或放进 AI 项目内网

先在 Zenavo 中连接一台 Linux 服务器,再根据你的用途选择:

  • 方式 A:只给 Open WebUI 或 LobeHub 做联网搜索后端(推荐) 打开你现有的 Open WebUI 或 LobeHub 项目,点右上角 添加服务(Add Service)→ 模板(Templates),选择 SearXNG。这样 SearXNG 直接运行在同一个项目内网里(http://searxng.zenavo.internal:8080),甚至不需要绑定公网域名,外人根本访问不到你的搜索接口。
  • 方式 B:同时作为自己日常使用的隐私搜索引擎 直接从 SearXNG 模板新建项目部署,然后在 searxng 服务的 网络(Networking) 页为 8080 端口绑定一个域名(如 search.example.com),等待 HTTPS 自动生效。详见域名文档。

当前模板的配置非常轻量(内存占用通常不到 200 MB):

配置 值或用途
镜像 searxng/searxng:latest
HTTP 端口 8080
配置卷 /etc/searxng(首次启动自动生成 settings.yml 与 limiter.toml)
缓存卷 /var/cache/searxng
SEARXNG_SECRET 项目创建时自动生成的随机密钥

2. 开启 JSON 输出格式(接入 AI 必做)

SearXNG 默认只允许浏览器访问 HTML 页面,直接请求 ?format=json 会返回 403 Forbidden。而 Open WebUI、LobeHub 等 AI 工具都需要通过 JSON 接口拉取搜索结果。

服务第一次启动并生成默认配置后,打开 /etc/searxng/settings.yml(可通过容器终端或配置文件功能编辑),找到 search: 下的 formats:,把 json 加进去:

search:
  formats:
    - html
    - json

如果你只通过 Zenavo 内网调用 SearXNG,还可以顺手确认 server: 下的 limiter: false(默认关闭限流器),避免无公网反代头时误拦截内网请求。保存后在控制台点 重启(Restart)。

3. 接入 Open WebUI

如果你按这篇指南部署了 Open WebUI:

  1. 用管理员账号登录 Open WebUI,打开 管理员面板 → 设置 → 联网搜索(Admin Panel → Settings → Web Search)。
  2. 打开 启用联网搜索(Enable Web Search) 开关。
  3. 联网搜索引擎(Web Search Engine) 选择 searxng。
  4. Searxng Query URL 填写:
    • 同项目内网(推荐):http://searxng.zenavo.internal:8080/search?q=<query>
    • 跨项目公网域名:https://search.example.com/search?q=<query>
  5. 点击保存。回到聊天窗口,打开输入框下方的 联网搜索(Web Search) 开关,问一句实时问题即可看到模型先检索网页再回答。

4. 接入 LobeHub

如果你按 LobeHub 部署指南搭建了多人对话平台,在 lobehub 服务的 变量(Variable) 页添加以下环境变量,保存并重启 lobehub:

SEARCH_PROVIDERS=searxng
SEARXNG_URL=http://searxng.zenavo.internal:8080

(若不在同一个 Zenavo 项目,把 SEARXNG_URL 换成你的 https://search.example.com。)重启后,LobeHub 对话框里的智能联网搜索就会通过你自己的 SearXNG 实例抓取网页信息。

5. 备份与升级

SearXNG 本身不存用户业务数据,只有你改过的 /etc/searxng/settings.yml 值得保留:

  1. 修改好 settings.yml 后,可以在项目停止窗口用 备份与恢复 备份 /etc/searxng 数据卷,或者直接把自定义的 settings.yml 内容复制留档。
  2. 模板默认使用 searxng/searxng:latest 以获取最新的上游搜索引擎解析规则(各搜索引擎经常改页面结构,SearXNG 更新较勤)。如果某次更新遇到兼容问题,可在服务 设置 → 来源 中固定到指定标签。

常见问题

Open WebUI 或 LobeHub 搜索时报 403 Forbidden? 99% 的原因是还没有按上文第 2 步在 /etc/searxng/settings.yml 的 search.formats 中加入 json,或者改完后没重启 searxng 服务。另外,如果你给公开域名套了机器人防护,建议同项目直接改用 http://searxng.zenavo.internal:8080 内网地址。

部分搜索引擎(如 Google)偶发返回超时或验证码? 云服务器机房 IP 频繁请求单一搜索引擎时,可能触发上游反爬限制。可以在 SearXNG 页面右上角的 首选项(Preferences)→ 引擎(Engines) 或 settings.yml 中同时勾选 Bing、DuckDuckGo、Brave、Wikipedia 等多个引擎分摊请求。

公开绑定了域名,怎么防止别人拿我的 SearXNG 刷接口? 如果只是给自己的 Open WebUI / LobeHub 用,最彻底的安全做法是不绑公开域名,只走 .zenavo.internal私有网络。如果还需要自己在浏览器里用,可以在 settings.yml 中开启 server.limiter: true(需搭配 Redis 或内置限流),或只开启 HTML、不对外开放 JSON。

可以配合自建模型网关一起用吗? 完全可以。许多用户的标准组合是在同一个 Zenavo 项目里跑 Open WebUI / LobeHub + SearXNG + Magpie(或 New API、LiteLLM),前端聊天、联网检索和模型路由全部在一台服务器内网闭环。

打开 SearXNG 模板,或在现有 AI 项目里直接添加 SearXNG 服务,几分钟就能给你的大模型加上零按次成本的联网搜索。