本文记录在 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 后台

  1. 登录 Open WebUI → 左下角头像 → 管理员面板(Admin Panel)
  2. 进入 设置 → Web Search(联网搜索)
  3. 打开 启用 Web Search / Enable Web Search 总开关
  4. 搜索引擎选择 searxng
  5. 填写查询地址(SearXNG Query URL):
http://172.17.0.1:8088/search?q=<query>&format=json

注意:<query> 是占位符,必须原样保留。

6.保存后刷新页面(Ctrl+Shift+R 强刷)。


五、验证联网搜索

  1. 在聊天页,把模型切换到支持工具调用的模型(如 Grok、Gemini、GLM)。
  2. 新建对话。
  3. 输入框附近应出现 🌐 地球图标,点亮它。
  4. 问一个需要实时信息的问题,例如「Open WebUI 最新版本是多少」。
  5. 回复中出现来源引用 / 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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注