Tropic Host

SearXNG:它是什么,以及如何在 VPS 上安装自己的搜索引擎

阅读约需 9 分钟
Tropic
SearXNG:它是什么,以及如何在 VPS 上安装自己的搜索引擎

SearXNG:在 VPS 上搭建不受追踪的私人搜索引擎

普通搜索引擎可以将搜索请求与 IP 地址、Cookie 和操作历史关联起来。SearXNG 改变了请求路径:浏览器访问你的实例,再由实例查询多个外部搜索引擎,并将它们的结果汇总到同一个页面中。

外部来源看到的是 SearXNG 服务器的地址,而不是用户的 Cookie。服务本身也不会建立广告画像。不过,这并不等于完全匿名:公共实例的所有者在技术上可以保留日志,而当用户打开搜索结果中的链接后,目标网站仍会重新与浏览器直接交互。

下面将介绍 SearXNG 的功能,并在 VPS 上安装一个带有 HTTPS 和密码保护的私人实例。

SearXNG 是什么,它如何工作

SearXNG 是一款免费、开源的元搜索引擎。它没有自己的网站索引,而是从已配置的搜索引擎和专业信息源获取结果,将结果统一整理后显示在一个界面中。

浏览器 → 你的 SearXNG → 搜索引擎
                         ↓
                      汇总结果

每次搜索时,SearXNG 会:

  1. 判断搜索类别,例如网页、图片、新闻、视频或其他类别;
  2. 以服务器的名义访问选定的信息源;
  3. 不向这些来源发送用户的 Cookie,并为外发请求使用随机浏览器配置;
  4. 将返回结果汇总到同一个搜索页面中。

速度取决于外部系统:它们可能响应缓慢、显示 CAPTCHA,或封锁服务器 IP。SearXNG 是一层可控的中间服务,而不是独立运行的搜索索引。

为什么 SearXNG 比单一搜索引擎更有吸引力

在同一结果页中整合不同来源

你可以把通用搜索引擎与专业来源组合起来,例如百科全书、地图、科研论文、代码仓库、新闻服务或图片目录。当普通搜索结果被 SEO 页面淹没,或难以找到小众资料时,这种方式尤其有用。

在本文撰写时,官方文档列出了 272 个集成,其中 83 个默认启用。但这并不意味着所有集成都同样稳定。

具体使用哪些来源取决于配置。通常,启用少量稳定来源会比同时开启全部来源更快。

快捷命令

借助缩写命令,可以临时指定搜索引擎、类别或语言:

!wp docker compose       — 在维基百科中搜索
!images 极光             — 搜索图片
:zh !wp 代理服务器       — 用中文在维基百科中搜索

命令 !! 会把用户直接重定向到外部搜索引擎。在这种模式下,SearXNG 的保护不再生效。

为浏览器和自有工具提供搜索能力

SearXNG 支持 OpenSearch,因此可以设为浏览器的默认搜索引擎。如果管理员启用了相应格式,还可以通过 HTTP API 获取 JSON、CSV 或 RSS 格式的结果。

一个实例可以作为内部面板、机器人、研究脚本或本地 AI 助手的搜索后端。只有在配置好身份验证和请求频率限制后,才应对外开放 API。

SearXNG 的隐私保护程度如何

它能做什么它不能做什么
不把浏览器 Cookie 发送给外部搜索引擎不能提供完全匿名
用服务器 IP 隐藏用户 IP打开搜索结果网站后不再提供保护
去除第三方广告和部分追踪参数无法保证他人服务器的所有者不会保留日志
可以代理加载图片不能替代 VPN、Tor 或浏览器安全防护

公共实例适合体验服务,但你必须信任其管理员,而且共享 IP 更容易受到限制。

自己的服务器可以让你控制日志、信息源和访问权限,但不会让浏览器本身变得匿名。

公共实例、家用服务器还是 VPS

方案优点限制
公共实例无需安装任何内容需要信任所有者,可能过载或出现 CAPTCHA
家用服务器无需租用 VPS 即可获得完全控制设备必须持续运行;外网访问配置更复杂
自有 VPS全天候运行,可使用域名和 HTTPS,并能从不同设备访问需要更新容器并关注安全性

自建 SearXNG 适合家庭、团队、开发者或本地 AI 工具。若只是偶尔搜索,使用公共实例更简单。

SearXNG 需要什么配置的 VPS

负载取决于用户数量、信息源数量和并发请求。以下是实用的起步配置:

使用场景CPURAM磁盘
单个用户1 vCPU1 GB10 GB
家庭或小型团队2 vCPU2 GB20 GB
API 和其他服务2–4 vCPU4 GB 起30 GB 起

不需要很大的磁盘。网络质量、稳定的 IP 地址和一定的 RAM 余量更重要。

这一场景可以使用 tropic.host 的 Linux VPS:先从较小的配置开始,再随着用户或 API 接入数量增加而扩展资源。选择套餐时,与其为大容量磁盘多付费用,不如优先考虑 RAM 和网络质量。

使用 Docker Compose 在 VPS 上安装 SearXNG

本示例使用 Ubuntu 24.04 LTS、search.example.com、Valkey 和 Caddy。请将 DNS A 记录指向服务器,并开放 80 和 443 端口。

1. 安装 Docker 并创建目录

sudo apt update
sudo apt install -y docker.io docker-compose-v2 openssl
sudo systemctl enable --now docker

sudo mkdir -p /opt/searxng/searxng
cd /opt/searxng

创建包含域名和随机密钥的 .env 文件:

printf 'SEARXNG_HOSTNAME=search.example.com\nSEARXNG_SECRET=%s\n' \
  "$(openssl rand -hex 32)" | sudo tee .env >/dev/null
sudo chmod 600 .env

2. 创建 docker-compose.yml

name: searxng

services:
  searxng:
    image: docker.io/searxng/searxng:latest
    restart: unless-stopped
    environment:
      SEARXNG_BASE_URL: https://${SEARXNG_HOSTNAME}/
      SEARXNG_SECRET: ${SEARXNG_SECRET}
      SEARXNG_VALKEY_URL: valkey://valkey:6379/0
    volumes:
      - ./searxng:/etc/searxng:rw
      - searxng-cache:/var/cache/searxng
    depends_on: [valkey]

  valkey:
    image: docker.io/valkey/valkey:9-alpine
    restart: unless-stopped
    command: valkey-server --save 30 1 --loglevel warning
    volumes:
      - valkey-data:/data

  caddy:
    image: docker.io/caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    environment:
      SEARXNG_HOSTNAME: ${SEARXNG_HOSTNAME}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    depends_on: [searxng]

volumes:
  searxng-cache:
  valkey-data:
  caddy-data:
  caddy-config:

3. 配置 SearXNG

创建 searxng/settings.yml

use_default_settings: true

general:
  instance_name: "Private Search"

search:
  safe_search: 1
  autocomplete: ""
  formats: [html]

server:
  limiter: true
  image_proxy: true

valkey:
  url: valkey://valkey:6379/0

创建 searxng/limiter.toml

[botdetection]
trusted_proxies = [
  "127.0.0.0/8",
  "::1",
  "172.16.0.0/12",
]

Limiter 可以降低机器人使实例过载的风险,也能减少外部搜索引擎更快限制该 IP 地址的可能性。

4. 添加密码和 HTTPS

生成一个强密码的哈希值:

sudo docker run --rm caddy:2-alpine \
  caddy hash-password --plaintext '替换为密码'

把生成的哈希值填入 Caddyfile

{$SEARXNG_HOSTNAME} {
    basic_auth {
        searchuser 在此插入哈希
    }

    reverse_proxy searxng:8080 {
        header_up X-Real-IP {remote_host}
    }
}

Caddy 保存的是哈希值,而不是明文密码。除了 Basic Auth,也可以只允许通过 VPN 访问该服务。

5. 启动容器

sudo docker compose config
sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps

打开 https://search.example.com。Caddy 会自动获取 TLS 证书,随后浏览器会要求输入用户名 searchuser 和密码。可以使用以下命令查看 SearXNG 日志:

sudo docker compose logs -f searxng

启动后还需要配置什么

只保留有用的信息源,选择语言和 SafeSearch 设置,然后通过 OpenSearch 将 SearXNG 添加到浏览器。更新时只需执行:

sudo docker compose pull
sudo docker compose up -d

请备份 .envCaddyfilesearxng 目录。仅在确有需要时启用 JSON API,并且不要让它在没有密码和请求频率限制的情况下对外开放。

常见错误

错误后果解决方法
向所有人开放实例机器人产生大量负载,IP 更容易受到限制使用密码、VPN 或单点登录
启用过多信息源搜索结果变慢并出现超时只保留少量稳定的搜索引擎
把 SearXNG 当成自有索引外部系统故障时,部分结果会消失考虑其对外部来源的依赖
期待完全匿名搜索结果网站仍然可以追踪浏览器使用浏览器防护、VPN 或 Tor
不使用 HTTPS搜索请求和密码会以不安全的方式传输使用带 TLS 的反向代理

总结

SearXNG 将不同来源整合到同一个界面,减少个性化影响,并为浏览器、脚本或本地 AI 提供统一搜索。想要体验时,公共实例已经足够。长期使用则更适合部署自己的服务器,并配置 HTTPS、身份验证、limiter 以及少量稳定的信息源。

可以从 1 GB RAM 开始。当用户数量增加、接入 API 或运行更多容器时,再扩展资源。

FAQ

SearXNG 是完全匿名的吗?

不是。它能向外部搜索引擎隐藏部分数据,但实例管理员仍可能保留日志。打开目标网站后,该网站自己的追踪机制仍会生效。

SearXNG 比 Google 更好吗?

它解决的是不同问题。Google 通常速度更快,也会更深度地个性化搜索结果。SearXNG 提供更多控制权,可以组合多个来源,并且对用户画像的依赖更少。

不使用 VPS 也能运行 SearXNG 吗?

可以。你可以使用公共实例、家用电脑、NAS 或迷你服务器。VPS 的作用是提供从任意网络全天候访问的能力。

需要多少内存?

单个用户可以从 1 GB 开始。家庭、团队、API 或额外容器更适合使用 2–4 GB。

可以把 SearXNG 接入浏览器或 AI 吗?

可以。浏览器可以使用 OpenSearch,程序则可以调用 HTTP API。API 访问应通过身份验证和 limiter 进行保护。