用 SearXNG 自建搜索上游
不想把查询交给第三方搜索 API?SearXNG 是自托管的元搜索引擎,聚合 70+ 引擎,零密钥成本。本文讲清怎么接进 WebSearch。
2026年9月14日
WebSearch 团队
用 SearXNG 自建搜索上游
WebSearch 的搜索层是可插拔的:Brave、Serper、Exa 都是托管服务,按量付费、开箱即用。但有一种场景它们都不合适——查询不想出内网。比如处理内部资料、合规要求数据不出域,或者单纯不想为每次搜索付上游费用。
这时答案是 SearXNG:一个自托管的元搜索引擎,聚合 Google、Bing、DuckDuckGo 等 70+ 引擎的结果,本身不需要任何 API 密钥。
部署一个实例
Docker 一行起:
docker run -d -p 8888:8080 \
-v ./searxng:/etc/searxng \
searxng/searxng
关键一步是开启 JSON 输出——SearXNG 默认只渲染 HTML。编辑 searxng/settings.yml:
search:
formats:
- html
- json
重启后验证:
curl 'http://localhost:8888/search?q=test&format=json'
返回 JSON 就说明实例就绪。
接进 WebSearch
管理后台 → 搜索 页面,三项配置:
- Provider 选
SearXNG - SearXNG 实例地址 填
http://your-host:8888(内网 IP 也可以,比如http://10.x.x.x:8888) - SearXNG 语言 可选,填
zh-CN会作为language参数下发
保存后用页面上的连通性测试跑一次真实查询,能看到 provider、耗时和前几条结果。测试不扣积分、不写日志。
和托管 API 的取舍
| SearXNG | Brave / Serper / Exa | |
|---|---|---|
| 上游费用 | 无 | 按量 |
| 部署运维 | 自己维护 | 零运维 |
| 数据走向 | 不出你的网络 | 查询发给第三方 |
| 结果质量 | 取决于聚合的引擎 | 独立索引,质量稳定 |
| 可用性 | 单点,需自己保障 | SLA 保障 |
实际项目里两者不冲突:SearXNG 当默认,托管 API 留作凭据备用——WebSearch 在所选 provider 缺配置时会自动回退到任何已配置的 provider,切换只是管理后台的一次下拉选择。
注意事项
- 网络可达性:SearXNG 地址是服务端直接请求的,部署 WebSearch 的机器必须能访问该地址。内网实例意味着公网部署(如 Cloudflare Workers)够不到它。
- SSRF 边界:SearXNG 地址属于管理员配置的可信基础设施,不受 Extract 的 SSRF 黑名单限制——那套防护只针对用户提交的 Extract URL。
- 限流:SearXNG 聚合的上游引擎各有频率限制,并发高时在 SearXNG 侧调
limiter配置。