SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

Searx 还是 SearXNG:Searx 已经停止维护了吗?

Searx 自 2023 年 4 月后没有新的代码提交,README 已写明“不再维护”。本文提供命令核查项目状态,并说明 Ubuntu 软件包、配置路径和机器人防护的变更。

Searx 还是 SearXNG:应该安装哪个?

Searx 和 SearXNG 是两个不同的项目,名称几乎相同,但目前只有其中一个仍在获得修复。请安装 SearXNG。原始 Searx 自 2023 年 4 月以来没有新的代码提交,其 README 也用一句话明确说明了现状:“Searx 已不再维护。”

这带来的问题是实际操作问题,而不是理念问题。这两个项目共用一张截图、大部分配置文件和一半名称,因此针对其中一个项目编写的指南看起来似乎也适用于另一个。但事实并非如此。设置文件位于其他位置,机器人防护机制已经更新,而且当前 Ubuntu 中已不存在该软件包名称。下文将说明两者的区别、用于自行检查状态的命令,以及部署实例时需要注意的变更。

Searx 是什么,以及 SearXNG 的由来

Searx 是一个元搜索引擎。它不维护自己的索引。它接收您的查询,将其转发给 Bing、DuckDuckGo 或 Wikipedia 等其他搜索服务,然后将返回结果合并到一个结果页面中。这样做的好处是,这些服务看到的是服务器地址,而不是您的地址。代价是维护工作。每个搜索引擎模块都是一小段用于解析其他服务 HTML 或 API 的代码,因此上游服务一旦发生变化,该模块就可能失效。元搜索引擎的稳定性取决于维护人员修复这些搜索引擎模块的能力。

searx 仓库创建于 2013 年 10 月。2021 年 4 月,一名前维护人员从该项目派生出 SearXNG。名称中的“NG”表示下一代。searx 自己的 README 并列介绍了这两个项目,这段说明至今仍是概括两者分歧最清晰的总结:

SearxNG 是 searx 的派生项目,由 searx 的一名前维护人员创建。
SearxNG 采用滚动发布,依赖项更新更频繁,搜索引擎修复速度更快。

这次派生背后的分歧在于诊断方式。Searx 认为实例不应保留使用数据,其默认设置明确表达了这一点:enable_stats: False # activate /stats page - note: it may leak usage data。SearXNG 则做出了相反的选择,并在默认设置中提供 enable_metrics: true。这些指标用于填充响应时间条和错误页面,使损坏的搜索引擎更容易被发现和修复。两种立场都有道理。但只有其中一种持续发布代码。

Searx 已停止维护吗?如何自行确认

“已停止维护”不是 GitHub 报告的状态,因此请查看现有的两个信号并自行判断。第一个信号是仓库是否已归档,以及最近一次 push 的时间。

curl -s https://api.github.com/repos/searx/searx | jq -r '.archived, .pushed_at'
curl -s https://api.github.com/repos/searxng/searxng | jq -r '.archived, .pushed_at'

截至 10 October 2026,第一个命令会输出 false 和 2026-05-14T10:02:22Z。第二个命令会输出 false 和一个较近的时间戳,通常来自最近一两天。请注意第一个值。searx 仓库没有归档,也没有人锁定仓库,因此这个问题会反复出现。

单独看 pushed_at 的参考价值很低,因为向任意分支 push 都会更新它,包括只修改一行文档的 push。请改为查看提交列表。

curl -s 'https://api.github.com/repos/searx/searx/commits?per_page=5' \
  | jq -r '.[] | .commit.committer.date[:10] + "  " + (.commit.message | split("\n")[0])'

截至 10 October 2026,该命令会输出:

2026-05-14  [doc] add hister reference
2023-09-07  Searx is no longer maintained
2023-04-05  Fix quoting issue in search_operator plugin (#3479)
2023-04-04  Bump pallets-sphinx-themes from 2.0.2 to 2.0.3 (#3450)
2023-04-04  Update searx.data - update_wikidata_units.py (#3454)

请从底部向上阅读。常规开发工作在 April 2023 停止。September 2023 的提交是维护者将通知写入 README。此后唯一的一次提交是文档修改,因为原作者转而开发 Hister。Hister 是一个搜索工具,用于索引您选择的页面和文件,而不是查询其他搜索引擎。这是另一种思路;如果您实际需要的是针对自己内容的个人搜索引擎,它会很有用。

第二个信号是软件包,而大多数旧教程暗中依赖的正是软件包。

  • PyPI 中有二十个 searx 版本,从 January 2014 的 0.1.2 到 July 2020 的 0.17.0,所有版本仍可下载。pip install searx 执行成功后会提供其中最新的 0.17.0;该代码发布于 fork 出现前九个月。
  • Debian 在 Debian 12 (bookworm) 中发布了 searx 1.1.0,并且仍在 unstable 中提供该软件包。它于 October 2023 从 testing 中移除,因此 Debian 13 (trixie) 完全没有 searx 软件包。
  • Ubuntu 最近一次发布 searx 是在 22.04 中,版本为 1.0.0。在 Ubuntu 24.04 上,sudo apt install searx 以 E: Unable to locate package searx 结束。
  • searx.space 是该项目一直引导用户访问的公共实例目录,现在列出的是 SearXNG 实例。

因此,准确的状态是:代码公开、仍可运行,您今天仍可以 clone 并启动它。但您不会获得引擎修复或安全更新,而对于元搜索引擎来说,这就是全部工作。搜索引擎的失效进度取决于其他服务。无人维护的实例会在每个月返回更少的结果,即使没有人操作那台服务器。

新实例中分支版本的变化

设置文件已移动,现在是覆盖配置

在 Searx 中,您需要编辑源码树中的 searx/settings.yml。在 SearXNG 中,该文件位于 /etc/searxng/settings.yml,进程通过 SEARXNG_SETTINGS_PATH 环境变量找到它。安装程序复制到该位置的模板很短:

use_default_settings: true

general:
  debug: false
  instance_name: "SearXNG"

search:
  safe_search: 2
  autocomplete: 'duckduckgo'
  formats:
    - html

server:
  # Is overwritten by ${SEARXNG_SECRET}
  secret_key: "ultrasecretkey"
  limiter: true
  image_proxy: true

valkey:
  # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}.
  url: valkey://localhost:6379/0

use_default_settings: true 是改变配置方式的那一行。启用后,您的文件只需包含覆盖项;未填写的键会使用软件包内置的默认值。不启用时,您的文件必须逐个引擎描述完整配置。很多实例因此能够正常启动,却找不到任何内容。将旧版 Searx 设置文件粘贴到此路径时,它会被视为包含不同键名的完整配置,因此会走第二种方式,而且会导致配置错误。

密钥会阻止进程启动

sudo -H sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" \
              "/etc/searxng/settings.yml"

复制模板后运行一次此命令。如果跳过,SearXNG 会记录一行日志并以状态 1 退出,因为 webapp.py 会在提供任何服务前,将密钥与模板值进行比较:

server.secret_key is not changed. Please use something else instead of ultrasecretkey.

当 general.debug 为 true 时会跳过检查。因此,实例可能在调试会话中正常运行,却在 systemd 下或容器中拒绝启动。容器因 docker compose logs 中存在该行而不断重启时,触发的是这项检查,而不是镜像损坏。

限流器是新增组件,需要 Valkey

Searx 不在应用内部执行限流。公共 Searx 实例会在前面部署独立服务:filtron 用于请求过滤,morty 用于代理结果内容。这两个仓库自 January 2023 以来都没有提交记录:filtron 的最后一次提交来自该月,morty 的最后一次提交来自 April 2021。

SearXNG 自己完成这些工作。限流和机器人检测由 limiter 负责,通过 server.limiter 启用。软件包默认值中它是 false,安装程序模板中是 true,并且需要使用 Valkey 数据库保存计数器。Valkey 是 Redis 的分支,Ubuntu 24.04 提供其软件包:

sudo apt install -y valkey-server
server:
  limiter: true

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

在该名称变更前编写的指南会配置 redis: 块,因此请从当前 limiter 文档中复制键名。精细调优配置位于第二个文件 /etc/searxng/limiter.toml 中,server.public_instance: true 会启用公共实例所需的更严格机器人检测,包括链接令牌方法。可见结果是,部分请求会收到 HTTP 429,而不是搜索结果;如果您通过脚本访问实例,自身请求也可能受到影响。相关说明见此页面:SearXNG 实例为何会返回 429 Too Many Requests。

引擎会自行暂停,超时时间较长

当上游服务返回 CAPTCHA 或限流页面时,SearXNG 会抛出类型化异常,并在一段时间内停止向该引擎发起请求,而不是持续重试导致封锁。默认值位于 searx/settings.yml 的 search.suspended_times 下。截至 October 2026,已发布的值如下,共 6 项:

图表SearXNG default engine suspension times, in seconds
此图表背后的数据
[
  {
    "label": "SearxEngineAccessDenied",
    "suspend_seconds": "180"
  },
  {
    "label": "SearxEngineCaptcha",
    "suspend_seconds": "3,600"
  },
  {
    "label": "SearxEngineTooManyRequests",
    "suspend_seconds": "180"
  },
  {
    "label": "cf_SearxEngineCaptcha",
    "suspend_seconds": "1,296,000"
  },
  {
    "label": "cf_SearxEngineAccessDenied",
    "suspend_seconds": "86,400"
  },
  {
    "label": "recaptcha_SearxEngineCaptcha",
    "suspend_seconds": "604,800"
  }
]

普通的访问拒绝响应会使该引擎暂停 180 秒。CAPTCHA 会使其暂停 3,600 秒。Cloudflare CAPTCHA 会使其暂停 1,296,000 秒,即十五天;Google reCAPTCHA 会使其暂停 604,800 秒,即一周。较长的时间是有意设置的,因为服务已经标记该地址后继续请求,可能导致实例 IP 被永久封锁。

引擎暂停期间,结果页会跳过该引擎,并在侧栏的 "Messages from the search engines" 块中报告;/stats/errors 会列出失败的项目。新实例返回的结果很少时,通常是因为这些引擎被暂停,而不是安装损坏。

JSON API 默认关闭

软件包默认值为 formats: [html],没有其他格式,因此脚本需要使用的 API 在您启用前处于关闭状态。

curl -s -o /dev/null -w '%{http_code}\n' \
  'http://127.0.0.1:8888/search?q=test&format=json'

该命令会输出 403,因为请求格式未列在 search.formats 中时,搜索路由会调用 flask.abort(403)。添加该格式并重启服务:

search:
  formats:
    - html
    - json

Searx 设置文件根本没有 formats 键,因此其 JSON 输出可以直接请求。那个时期的所有脚本和代码片段都默认如此,失败时只会返回没有解释的 403。如果您要将实例接入工具链,为代理提供可用于搜索的 SearXNG 端点,第一步就是启用这一项。

为什么复制粘贴的 Searx 教程会失败

这些命令都出现在仍能排在搜索结果前列的指南中,但在当前安装环境下,它们要么失败,要么会误导用户。

  • sudo apt install searx 在 Ubuntu 24.04 上会停在 E: Unable to locate package searx,因为该软件包最后一次发布是在 22.04。
  • pip install searx 可以成功执行,并安装 2020 年 7 月发布的 0.17.0。它不会提示该版本早于分叉。
  • git clone https://github.com/asciimoo/searx 仍然有效,因为 GitHub 会重定向旧的所有者名称。它会检出当前默认分支;该分支包含一项 2026 年 5 月的文档提交,但应用代码自 2023 年 4 月起就没有变化。
  • 修改源代码树中的 searx/settings.yml 的步骤对 SearXNG 没有影响,因为 SearXNG 读取的是 /etc/searxng/settings.yml。
  • 安装 filtron 或 morty 的步骤是在重新构建 SearXNG 已经包含的功能。
  • 限流器使用的 redis: URL 比当前的 valkey: 键名落后了一次重命名。

SearXNG 指南也会过时,而克隆 URL 是判断指南新旧最快的方法。compose 文件过去位于单独的 searxng-docker 仓库中。该仓库现在已归档,最后一次推送是在 2026 年 3 月,其文件已移入主仓库的 container/。文档当前提供的容器快速入门命令如下:

mkdir -p ./searxng/core-config/
cd ./searxng/
curl -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
nano .env
docker compose up -d

在执行最后一个命令前,编辑 .env。该镜像会将环境变量映射到设置键,因此 SEARXNG_SECRET 会变为 server.secret_key,SEARXNG_BASE_URL 会变为 server.base_url。使用脚本在主机上安装是另一条路径,但结果相同:

git clone https://github.com/searxng/searxng.git searxng
cd searxng
sudo -H ./utils/searxng.sh install all

该命令会创建 searxng 用户,在 /usr/local/searxng 下创建虚拟环境,并创建 uWSGI 服务。这是 SearXNG 文档中的参考配置。该路径的完整说明请参阅自行在 VPS 上安装 SearXNG。

公共实例还是自行部署的实例

公共实例使用他人的服务器终止您的 TLS(传输层安全)连接,因此该服务器上的软件可以以明文读取您的查询。SearXNG 的官方文档明确说明了信任问题:您必须信任管理员,而且无法知道请求是否会被记录、汇总或传递给第三方。可见的信息范围并不大,但内容是完整的。运营者使用的技术栈可以看到查询文本、时间、请求来源 IP 地址、浏览器 user agent,以及保存您设置的偏好 cookie。运营者还控制着代码,因此他们应用的任何补丁都会在您通过该实例执行的每次搜索中运行。

某个默认设置会让查询意外进入日志。Searx 使用 POST 发送搜索请求。SearXNG 发布时使用 method: "GET",并说明 POST 可以避免搜索查询出现在浏览器历史记录中,但会带来可用性问题。使用 GET 时,查询会位于请求行中,因此默认会写入反向代理访问日志,也会出现在浏览器历史记录中。这是普通的 Web 服务器行为。在决定使用谁的服务器之前,应了解这一点。

运行自己的实例只是转移信任,并不会消除信任。您可以控制代码和日志。如果您完全不想为单用户实例发布主机名或 TLS 证书,也可以通过 使用 v3 onion service 访问实例 连接。这样实例不会出现在公共 DNS 中,但您仍可从任何位置访问它。代价是,上游引擎会看到您所有搜索使用同一个地址;在单用户实例中,每条查询都会追溯到您,而不会与其他用户的查询混在一起。繁忙的公共实例可以提供这种人群混淆效果,同时让您无需管理日志。请根据您重视的属性进行选择。如果您想先了解完整的风险列表,请参阅 SearXNG 是否安全可用。位置历史记录也需要采用同样的思路,但风险更高,因为手机全天上报位置所泄露的信息多于任何搜索日志。如果您想将这些数据保存在自己控制的服务器上,可以从 比较自托管位置跟踪器 开始。

关于 VPS,还有一个实用提示。数据中心的地址段比家庭网络更容易被标记,因此新实例在前几次搜索中就可能在某些搜索引擎遇到 CAPTCHA。这是上述暂停机制正常生效的表现,不是配置错误。如果暂停期结束后,同一批搜索引擎仍持续返回阻止访问的结果,先读取实际错误再进行更改可以避免盲目尝试修复方法。

如果您已经运行 Searx 实例

您在读到本文的当天不会立即遇到故障。该服务器会继续运行,直到上游的下一次变更导致另一个引擎失效,之后实例就会一直处于故障状态。请规划迁移,不要直接迁移配置文件。应从 SearXNG 模板开始,然后只重新添加您明确修改过的内容:实例名称、safe_search、您按名称启用或禁用的引擎,以及界面默认设置。该分支中的引擎名称和选项已经发生变化,因此请逐项对照当前文档检查,不要假设原配置项仍然存在。Filtron 规则和 morty URL 没有对应配置,因为这些功能已经移入应用内部。

在旧实例仍运行时,使用其他端口启动新实例。当前迁移准备就绪的条件是:前端页面返回 200,搜索结果来自多个引擎,并且 /stats/errors 为空,或其中列出的故障都在您的理解范围内。然后将反向代理切换到新实例,并停止旧服务。

FAQ

Searx 在 2026 年已经停止了吗?

该仓库尚未归档,因此仍可克隆,但项目已经停止维护。最近一次代码提交是在 2023 年 4 月,README 中也写着“Searx is no longer maintained.”。使用 curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at' 自行检查,然后阅读最近的提交消息,因为仅凭推送日期无法排除那只是一次文档修改。对于元搜索引擎来说,停止维护意味着搜索结果会自行变差,因为每个引擎模块都依赖一个持续变化的上游站点。

现在还能使用 apt 或 pip 安装 Searx 吗?

在当前系统上不能,也不值得这样做。Ubuntu 最后一次打包 searx 是在 22.04,版本为 1.0.0,因此在 24.04 上运行 sudo apt install searx 会返回 E: Unable to locate package searx。Debian 在 Debian 12 中提供了 1.1.0,并于 2023 年 10 月将其从 testing 中移除,因此 Debian 13 没有该软件包。PyPI 仍提供所有 searx 版本,最新版本是 2020 年 7 月发布的 0.17.0,比该 fork 本身还要旧。请改为安装 SearXNG。

我原来的 searx settings.yml 能在 SearXNG 中使用吗?

不能。请复制其中的值,不要直接复制文件。SearXNG 读取 /etc/searxng/settings.yml,并要求文件顶部存在 use_default_settings: true,因此你的文件会作为已发布默认配置的覆盖层。旧版 searx 文件是完整配置,使用了不同的键名,其中没有 limiter,没有 valkey 块,也没有 formats 列表。请从 utils/templates/etc/searxng/settings.yml 中的模板开始,然后逐项重新添加你的修改。

为什么我自己的 SearXNG 实例返回的结果比公共实例少?

部分引擎会被暂时停用。当某个引擎返回 CAPTCHA 或限流页面时,SearXNG 会在固定时间内停止查询该引擎:普通拒绝为 180 秒,Cloudflare CAPTCHA 则为 1,296,000 秒。结果页面会在“搜索引擎返回的消息”下报告此情况,/stats/errors 会列出失败项及其原因。数据中心地址比家庭网络连接更容易被标记,因此新建的 VPS 实例通常很快就会遇到这个问题。

应该使用公共 SearXNG 实例,还是自行运行?

如果你希望控制代码和日志,并且能够接受上游搜索引擎将你的所有搜索请求视为来自同一个地址,请自行运行。如果相比了解日志内容,你更在意将搜索请求与其他用户的请求混合,请使用公共实例。在公共实例上,运营者可以看到查询文本、时间、你的 IP 地址和 user agent,也可以随时修改代码。运营者声明的日志策略无法从外部验证。