自建 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:
- 用管理员账号登录 Open WebUI,打开 管理员面板 → 设置 → 联网搜索(Admin Panel → Settings → Web Search)。
- 打开 启用联网搜索(Enable Web Search) 开关。
- 联网搜索引擎(Web Search Engine) 选择
searxng。 - Searxng Query URL 填写:
- 同项目内网(推荐):
http://searxng.zenavo.internal:8080/search?q=<query> - 跨项目公网域名:
https://search.example.com/search?q=<query>
- 同项目内网(推荐):
- 点击保存。回到聊天窗口,打开输入框下方的 联网搜索(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 值得保留:
- 修改好
settings.yml后,可以在项目停止窗口用 备份与恢复 备份/etc/searxng数据卷,或者直接把自定义的settings.yml内容复制留档。 - 模板默认使用
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 服务,几分钟就能给你的大模型加上零按次成本的联网搜索。
这是 coding agent 读到的内容,地址是 https://zenavo.app/zh-CN/blog/self-host-searxng.md。
无法加载 Markdown,请直接打开: https://zenavo.app/zh-CN/blog/self-host-searxng.md