Open WebUI 配置联网搜索(Web Search)完整教程
本文记录在 VPS 上给 Open WebUI 配置联网搜索的完整过程,包括自建 SearXNG 搜索引擎、解决 403 报错、后台配置,以及踩坑记录。
一、背景与架构
- Open WebUI:跑在 Docker 里,绑定
127.0.0.1:3000,由外层 Nginx/Caddy 反代对外提供 HTTPS。 - 联网搜索:Open WebUI 本身不搜索,需要接一个搜索引擎。本文选用 SearXNG(免费、无需 API Key、可聚合多家引擎)。
- 容器网络:两个容器都在默认 bridge 网络,通过 docker0 网桥网关
172.17.0.1互访。
最终架构:
浏览器 → Nginx/Caddy → Open WebUI (127.0.0.1:3000)
↓ 调搜索
SearXNG (172.17.0.1:8088)
二、部署 SearXNG
1. 确认 docker0 网关 IP
Open WebUI 容器要访问宿主机上的 SearXNG,需要用 docker0 网桥的网关 IP:
docker network inspect bridge | grep -i gateway
# 输出示例:"Gateway": "172.17.0.1"
2. 启动 SearXNG 容器
docker run -d \
--name searxng \
--restart unless-stopped \
-p 8088:8080 \
-v searxng-data:/etc/searxng \
-e SEARXNG_BASE_URL=http://172.17.0.1:8088/ \
searxng/searxng
说明:
-p 8088:8080:宿主机 8088 映射到容器内 8080(容器内固定监听 8080)。SEARXNG_BASE_URL必须填对,否则 JSON 接口会出问题。- 端口选 8088 是因为宿主机 8080 常被占用,建议先
docker ps或ss -lntp查一下。
三、解决 403 Forbidden
新版 SearXNG 默认关闭了 format=json 接口,直接访问会返回 403:
curl 'http://127.0.0.1:8088/search?q=test&format=json'
# 返回 <h1>Forbidden</h1>
解决方法:在 settings.yml 里加回 json 格式
docker exec -i searxng sh -c 'cat > /etc/searxng/settings.yml << "EOF"
use_default_settings: true
server:
secret_key: "你的secret_key"
image_proxy: true
search:
formats:
- html
- json
EOF'
secret_key保留原有的,别改。然后重启:
docker restart searxng
验证
curl 'http://127.0.0.1:8088/search?q=test&format=json'
# 正常返回 JSON 即成功
四、配置 Open WebUI 后台
- 登录 Open WebUI → 左下角头像 → 管理员面板(Admin Panel)
- 进入 设置 → Web Search(联网搜索)
- 打开 启用 Web Search / Enable Web Search 总开关
- 搜索引擎选择
searxng - 填写查询地址(SearXNG Query URL):
http://172.17.0.1:8088/search?q=<query>&format=json
注意:
<query>是占位符,必须原样保留。
6.保存后刷新页面(Ctrl+Shift+R 强刷)。
五、验证联网搜索
- 在聊天页,把模型切换到支持工具调用的模型(如 Grok、Gemini、GLM)。
- 新建对话。
- 输入框附近应出现 🌐 地球图标,点亮它。
- 问一个需要实时信息的问题,例如「Open WebUI 最新版本是多少」。
- 回复中出现来源引用 / Sources 或具体实时信息,即配置成功。
六、踩坑记录
| 问题 | 原因 | 解决 |
|---|---|---|
failed to bind host port 8080 | 宿主机 8080 已被占用 | 换端口,如 8088 |
Conflict. The container name "/searxng" is already in use | 旧容器未删除 | 先 docker rm searxng 再重新 run |
curl 返回 403 Forbidden | 新版默认关闭 json 格式 | settings.yml 加回 json |
open-webui 容器内 wget: not found | 容器没装 wget | 改用 curl -s 或 python3 |
| 地球图标出现又消失 | 切换到了不支持工具调用的模型 | 切回 Grok/Gemini/GLM |
| 地球图标完全不显示 | 联网搜索总开关没开 | 后台 Web Search 打开开关并保存 |
| DeepSeek 点地球不搜索 | DeepSeek 对联网调用支持有限 | 用 Grok/Gemini 做联网,DeepSeek 专注离线写作 |
七、哪些模型支持联网?
联网能力取决于模型是否支持工具调用(function calling):
| 模型 | 联网支持 |
|---|---|
| Grok | ✅ 稳定 |
| Gemini | ✅ 稳定 |
| GLM / Qwen | ✅ 大概率支持 |
| DeepSeek | ⚠️ 官方支持,但调用不稳,不强求 |
| Llama 3.1 | ✅ 官方宣传支持工具调用 |
如果某模型默认不显示地球图标,可在「管理员面板 → 模型 → 编辑 → Capabilities」里手动勾选
tools,但不保证模型真的会调用搜索。
八、安全建议(可选)
默认 -p 8088:8080 会把 SearXNG 暴露到公网,建议只绑定本机:
docker rm -f searxng && docker run -d \
--name searxng \
--restart unless-stopped \
-p 127.0.0.1:8088:8080 \
-v searxng-data:/etc/searxng \
-e SEARXNG_BASE_URL=http://172.17.0.1:8088/ \
searxng/searxng
九、总结
- SearXNG:免费、无需 Key、可聚合多家搜索引擎,是 Open WebUI 联网搜索的理想后端。
- 关键点:解决 json 403、填对容器间访问 IP、打开后台总开关。
- 使用习惯:需要实时信息时切到 Grok/Gemini 并点亮 🌐;DeepSeek 等模型专注离线写作。
参考
- SearXNG 文档:https://docs.searxng.org/
- Open WebUI Releases:https://github.com/open-webui/open-webui/releases