SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-26

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 报告的状态,因此需要查看现有的两个信号,再自行判断。第一个信号是仓库是否已归档,以及最近一次推送发生在什么时候。

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'

在 22 August 2026,第一条命令会输出 false2026-05-14T10:02:22Z。第二条命令会输出 false,以及运行命令当天的时间戳。请注意第一个值。searx 仓库没有归档,也没有人锁定仓库,因此这个问题会反复出现。

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

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

截至 August 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  Bump selenium from 4.7.2 to 4.8.3 (#3490)

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

第二个信号是软件包,而大多数旧教程都会默认依赖软件包。

  • PyPI 只有一个 searx 版本,即 0.17.0,于 July 2020 上传。pip install searx 可以成功执行,并为您提供 fork 创建前九个月的代码。
  • Debian 在 Debian 12 (bookworm) 中提供了 searx 1.1.0,并且目前仍在 unstable 中保留该软件包。它于 October 2023 从 testing 中移除,因此 Debian 13 (trixie) 完全没有 searx 软件包。
  • Ubuntu 最后一次提供该软件是在 22.04,版本为 1.0.0。在 Ubuntu 24.04 上,sudo apt install searxE: Unable to locate package searx 结束。
  • searx.space 是该项目一直引导用户访问的公共实例目录,现在列出的是 SearXNG 实例。

因此,准确的状态是:代码仍然公开,仍然可以运行,您今天仍可克隆并启动它。但您不会获得搜索引擎修复或安全更新,而对于元搜索引擎来说,这正是软件的全部职责。搜索引擎会按照其他人的更新周期逐渐失效。无人维护的实例每个月返回的结果都会减少,即使没有人操作服务器。

新实例中分支版本的变化

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

在 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 用于代理结果内容。这两个仓库上一次提交都在 2023 年。

SearXNG 自行完成这部分工作。限流和机器人检测由限流器负责,通过 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: 块,因此请从当前限流器文档中复制键名。精细调整位于第二个文件 /etc/searxng/limiter.toml 中,server.public_instance: true 会启用公共实例所需的更严格机器人检测,包括链接令牌方法。直接结果是,部分请求会收到 HTTP 429,而不是搜索结果;如果您通过脚本访问实例,自己的请求也可能受到影响。相关说明见此处:为什么 SearXNG 实例会返回 429 Too Many Requests

引擎会自行暂停,而且超时时间很长

上游服务返回 CAPTCHA 或限流页面时,SearXNG 会抛出类型化异常,并在一段时间内停止请求该引擎,而不是继续重试直到被封锁。默认值位于 searx/settings.ymlsearch.suspended_times 下。截至 2026 年 8 月,已发布的值共有 6 个:

ChartSearXNG default engine suspension times, in seconds
The data behind this chart
[
  {
    "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 秒,即 15 天;Google reCAPTCHA 会使其暂停 604,800 秒,即 1 周。这些较长的值是有意设置的,因为服务已经标记该地址后继续请求,可能导致实例 IP 被永久封锁。

引擎暂停期间,结果页面会跳过该引擎,并在标题为“搜索引擎消息”的侧边栏块中报告相关信息;/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 输出只需请求即可获得。那个时期的每个脚本和代码片段都假定 API 默认开放,失败时只会返回没有说明的 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 会将旧所有者名称重定向到新名称,并向你提供 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_keySEARXNG_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 服务访问该实例可以让实例不出现在公网 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 仍提供 2020 年 7 月发布的 0.17.0,该版本比分叉项目本身还要旧。请改为安装 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 秒。结果页面会在 “Messages from the search engines” 下报告此情况,/stats/errors 会列出失败项及其原因。数据中心地址比家庭网络连接更容易被标记,因此新建的 VPS 实例通常会很快遇到此问题。

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

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