SearXNG安全吗?公共实例和自建服务器谁能看到查询
SearXNG 会把您的 IP 替换为服务器 IP,但公共实例运营者仍能看到明文查询;自建 VPS 也可能因 nginx 访问日志记录查询。
SearXNG 是否安全?简短回答
SearXNG 在某些方面安全,在另一些方面不安全。因此,只有明确您要隐藏的对象后,“SearXNG 是否安全”这个问题才有答案。SearXNG 是元搜索引擎:它接收您的查询,将查询发送到 Google、Bing、DuckDuckGo 以及您启用的其他搜索引擎,然后把返回结果合并到一个结果页面中。各搜索引擎看到的是实例。实例看到的是您。
如果使用陌生人运行的公共实例,该实例的运营者会收到您输入的每条查询,内容为明文。其关于页面上的任何内容都无法证明运营者会如何处理这些查询。如果使用您自己的服务器,上游搜索引擎看到的是服务器地址,而不是您的家庭地址。这种替换就是全部隐私保护,其价值完全取决于运行该实例的服务器。
这些措施都不会让您自己的网络无法看到搜索行为。您的互联网服务提供商(ISP)仍能看到您与该实例建立的连接。您的 DNS(域名系统)解析器仍能看到该主机名。阅读后续内容时,请牢记这一边界。
搜索请求中 SearXNG 的变化
直接搜索 Google 时,Google 会收到您的 IP 地址、Cookie、User-Agent 标头和来源页面信息。这些信息都会关联到一个生命周期长于当前会话的用户画像。SearXNG 位于两者之间。其文档说明了它执行的两项操作:“从发送到搜索服务的请求中移除私密数据”和“为每个请求生成随机浏览器画像”。您的 Cookie 不会转发给任何搜索引擎。您的偏好设置存储在您自己的浏览器中,而不是服务器上的账户中。
默认会发送以下两个响应标头,且二者都会发挥实际作用:
default_http_headers:
X-Robots-Tag: noindex, nofollow
Referrer-Policy: no-referrerReferrer-Policy: no-referrer 表示,当您点击搜索结果时,目标网站不会获知是哪个搜索页面引导您访问,因为浏览器会省略 Referer 标头。X-Robots-Tag: noindex, nofollow 则使您的实例及其结果页面不会出现在搜索索引中。
SearXNG 不会改变查询内容本身。查询会以完整且可读的形式到达实例,因为 TLS(传输层安全)在实例处终止。下面的每一点都源于这一事实。
公共实例上的运营者可以看到每条查询
项目文档对此有明确说明:公共实例的用户“必须信任该实例的管理员”,而且无法知道“他们的请求是否会被记录、汇总并发送给第三方,或出售给第三方”。登录页上的无日志声明只是声明。从外部无法验证这一点,因此只能选择信任,或不使用。
记录查询也是最省事的做法,因为发布版本的默认配置会将查询放入 URL:
server:
method: "GET"使用 GET 时,查询会以 ?q=... 的形式出现在请求行中。普通反向代理都会将请求行写入访问日志,因此即使没有人决定记录查询,查询也会被记录:
203.0.113.5 - - [20/Aug/2026:09:14:02 +0000] "GET /search?q=redundancy+pay+notice+period&category_general=1&language=en HTTP/1.1" 200 15321 "-" "Mozilla/5.0 (X11; Linux x86_64)"在自己的实例上,可以自行检查:
sudo tail -n 5 /var/log/nginx/access.log搜索记录在其中,是因为 nginx 的 combined 日志格式会写入 $request,也就是包含查询字符串的完整请求行。SearXNG 无法决定是否记录它。将实例切换为 method: "POST" 后,查询会移到请求正文中,因此不会再出现在访问日志或浏览器历史记录中。文档也坦诚说明,POST 存在一些缺点,会“严重限制最终用户的易用性”,主要影响浏览器的后退按钮。这是你有意作出的取舍。
对于任何公共实例,这会带来两个后果。无论运营者是否有意收集,你的查询都可能被其读取。备份泄露或服务器遭到入侵时,同一份日志也会被获取。
在自己的 VPS 上运行实例后,搜索引擎看到的是服务器,而不是您
在 VPS(虚拟专用服务器)上运行自己的实例后,变化很容易说明:Google 不再通过您的查询获取家庭 IP 地址,而是获取服务器的 IP 地址。它无法将这次搜索关联到您的已登录账户、手机,或与家庭网络连接关联的广告画像。具体构建过程请参阅在 VPS 上运行自己的 SearXNG 实例指南。
需要明确的是,有些信息并未改变。搜索引擎仍可看到查询文本、查询时间、您请求的语言和地区,以及数月内所有搜索内容形成的整体模式;这些信息都会归到同一个稳定地址下。如果只有您一个人使用该实例,这个地址就会形成一条按个人归集的记录,只是没有附带姓名。要打破这种归集,需要让实例通过出站代理或 Tor 访问搜索引擎。SearXNG 支持这两种方式,但这属于另一项工作。
ISP、DNS 解析器和主机仍可看到的内容
上述措施不会影响以下 4 类观察者。
- 您的 ISP 可以看到到实例 IP 地址的 TLS 连接,也可以看到 SNI(服务器名称指示)字段中的主机名。该字段会在握手期间以明文发送。ISP 看不到查询内容。
- 您的 DNS 解析器可以看到对该主机名的解析请求。加载页面时,可在客户端使用
sudo tcpdump -ni any port 53监控该请求,届时会出现针对实例的 A 记录请求。 - 您的 VPS 提供商负责运行底层硬件,因此可以读取虚拟机的磁盘和内存。在租用的 VM 内进行磁盘加密也无法改变这一点,因为运行中的系统持有密钥。
- 在实例上拥有 root 权限的任何人都可以看到全部内容。这包括您,也包括之后取得访问权限的人。
还有一点经常被忽略。服务器的出站请求会在服务器自身的网络中暴露,因此您的提供商可以看到您的机器整天与 Google 和 Bing 通信。这属于流量模式,而不是查询本身,但仍然会透露一些信息。
这就引出了 VPN 问题。VPN(虚拟专用网络)会将 ISP 可见的内容转移为 VPN 公司可见的内容。它不会改变实例运营方可见的内容,也不会改变搜索引擎可见的内容,因为搜索引擎连接的是您的服务器,而不是您本人。两者的区别详见VPS 与 VPN 的对比。
SearXNG 为什么会阻止请求,以及 429 的真正含义
“被 SearXNG 阻止”可能指两种不同的事件,修复方法也不同。
第一种是您自己的限流器返回 HTTP 429。这是 SearXNG 的机器人防护,默认关闭:
server:
limiter: true
valkey:
url: valkey://localhost:6379/0截至 August 2026,限流器需要 Valkey 数据库,并从 /etc/searxng/limiter.toml 读取规则。如果确实有其他人使用此服务器,还应设置 server.public_instance: true,因为它默认值为 false,用于控制面向公网的行为。
限流器会执行多个检测。http_user_agent 会将未设置 User-Agent,或 User-Agent 匹配 curl、wget 等已知工具的请求视为机器人。http_accept 会将 Accept 请求头不包含 text/html 的请求视为机器人。link_token 会在客户端从未获取真实浏览器会加载的 /client<token>.css URL 时,将其标记为可疑客户端。检测命中后,SearXNG 返回 429,并向其 botdetection 记录器写入 ERROR 行。
因此,下面的请求失败是正常行为:
curl -s -o /dev/null -w '%{http_code}\n' 'https://searx.example.com/search?q=test'curl 会发送 User-Agent: curl/8.5.0 和 Accept: */*,因此会同时命中两个检测条件。这就是脚本和 AI agent 从实例获取 429,而浏览器访问正常的原因。在 将 agent 的搜索技能指向您自己的实例之前,应先修复此问题。完整的原因和设置说明见SearXNG 速率限制和 429 错误指南。
还需要注意一个限流器陷阱。位于反向代理后时,如果未将代理列为可信代理,SearXNG 看到的是代理地址,而不是访问者地址:
[botdetection]
ipv4_prefix = 32
ipv6_prefix = 48
trusted_proxies = ['127.0.0.0/8', '::1']
[botdetection.ip_limit]
link_token = false
[botdetection.ip_lists]
pass_ip = []
block_ip = []默认列表包含同一主机上的代理。位于独立 Docker 网络中的代理会从类似 172.18.0.5 的地址连接,但该地址不在列表中。因此,所有访问者都会被计为同一个客户端,第一个繁忙用户就会导致其他所有人无法访问。将该子网添加到 trusted_proxies。
第二种阻止发生在上游。某个引擎会将运行大量搜索的数据中心地址视为爬虫,并停止响应您的服务器。此时不会返回 429,而是返回一个缺少该引擎结果的结果页,并在该引擎旁记录失败。多次失败后,SearXNG 还会暂时停用该引擎。原因在于 VPS 使用的地址,因此应更换引擎并等待恢复,而不是修改限流器。
与陌生人共用实例有帮助,还是会带来风险?
两方面都有,而且方向相反,所以答案并不简单。匿名性来自群体效应。在繁忙的公共实例上,您的查询会与数千名其他用户的查询使用同一个地址发出,因此任何搜索引擎都无法从中单独识别您的查询。在您独享的实例上,来自该地址的每个查询都属于您。搜索引擎会收到一组干净的单用户查询流,但其中不包含您的姓名。
对运营者而言,情况正好相反。用户数量庞大的群体意味着陌生人可以看到整个群体的明文查询,其中也包括您的查询。使用您自己的服务器时,您只持有自己的查询,不会持有其他人的查询。
因此,应根据您实际面对的威胁进行选择。如果您担心广告画像和跨站跟踪,共享群体能有效降低这类风险,而运营者风险较小。如果您担心某个特定个人或公司读取您执行过的某一条具体搜索,共享群体完全无法提供帮助,因为运营者可以看到原始文本。一个较好的折中方案是,与少数您认识的人共用一个实例。这样既有小型用户群体,又可以验证运营者,因为运营者就是您自己。
SearXNG 的结果比 Google 更好吗?
不是。SearXNG 不维护自己的索引,因此页面上的每条结果都来自上游搜索引擎,结果质量的上限取决于您启用的搜索引擎。如果禁用 Google 和 Bing,质量会当天下降,因为大部分通用网页覆盖范围来自这两个引擎。
变化在于对您的查询所执行的处理。不会有人根据查询建立广告画像,也不会根据您上周点击过的内容重新排序结果。这一变化有利有弊,因为个性化也能提供本地搜索意图。通过 SearXNG 搜索“当前营业的药店”时,结果会更弱,因为除了服务器所在的数据中心外,搜索引擎无法获得服务器的位置信号。如果需要本地结果,请在偏好设置中指定区域。
有两个设置决定您查看这些结果时,实例会泄露多少信息。image_proxy 默认设置为 false,因此缩略图会直接从托管它们的网站加载,这些网站也会看到您浏览器的地址。将其设置为 image_proxy: true 后,缩略图会改由实例代理,但会增加带宽和内存消耗。此外,formats 仅以 html 形式提供,因此 JSON(JavaScript 对象表示法)请求会被 403 Forbidden 拒绝:
curl -s -o /dev/null -w '%{http_code}\n' 'https://searx.example.com/search?q=test&format=json'在公网实例上启用 json,就等于发布了一个免费的抓取 API。这是导致依赖的搜索引擎封禁服务器地址的最快方式。请保持关闭,或将其置于身份验证之后。
SearXNG 隐私保护的边界
SearXNG 会隐藏向搜索引擎发起请求的用户身份,但不会隐藏您在网络中的行为。由此需要注意以下4点。
- 除了搜索框中的请求,其他网络流量都不会改变。计算机执行的其他所有操作仍会像以前一样离开您的网络。
- 对每个搜索引擎而言,来自同一服务器的同一用户是一个稳定标识符。该标识符不包含姓名,这就是全部收益。
- 任何实例的运营者都能以明文读取查询内容。只有您自己运营实例时,才能确认这一点不会发生。
- 您自己的访问日志会重新构建您原本想避免留下的记录。请查看这些日志;如果您希望日志保持为空,请切换到
method: "POST"。
SearXNG 只是转移了观察者,并没有消除观察。请确定您介意哪一类观察者,选择匹配的实例,不要把搜索前端当作匿名软件。
FAQ
SearXNG 在公共实例上使用安全吗?
它可以防止搜索引擎获取你的信息,但无法防止实例运营者获取你的信息。你的查询会以明文形式到达该服务器。项目文档明确指出,用户“必须信任该实例的管理员”,并且无法知道“请求是否会被记录、汇总后发送给第三方,或出售给第三方”。在 method: "GET" 的默认配置下,无论运营者是否希望记录查询,查询也会作为请求行的一部分写入反向代理的访问日志。若你担心广告画像,可以使用公共实例进行普通搜索。不要在公共实例中输入任何你不愿交给其所有者的信息。
SearXNG 会向互联网服务提供商隐藏我的搜索内容吗?
它会隐藏查询文本,但不会隐藏访问活动。你的互联网服务提供商可以看到连接到该实例地址的 TLS 连接,以及握手过程中明文 SNI 字段中的主机名;DNS 解析器也可以看到对该主机名的查询。由于连接已加密,两者都无法看到你的搜索内容。SearXNG 不是 VPN,也不会保护你计算机发出的其他流量。
SearXNG 为什么返回 429 错误?
429 来自实例自身的限流器。这是机器人防护机制,不是 Google 返回的消息。该机制的探测会标记 Accept 请求头缺少 text/html 的请求,也会标记 User-Agent 未设置或与 curl、wget 等工具匹配的请求。第三项探测是链接令牌:如果客户端从未获取浏览器加载的 /client<token>.css URL,就会被标记。若 /etc/searxng/limiter.toml 中缺少反向代理配置 trusted_proxies,所有访客都会被计为同一个客户端,因此一个繁忙用户就能阻塞其他用户。若是上游搜索引擎阻止了你的服务器,该引擎的结果只会从页面中消失,不会返回 429。
自托管 SearXNG 会降低我的搜索结果质量吗?
有时会,原因主要有两个。结果来自上游搜索引擎。如果这些引擎对数据中心地址进行限流,就会有更少的引擎返回结果,页面内容也会更少。其次,个性化排名会消失。这既去除了由广告驱动的结果重排,也去除了本地搜索意图。因此,在偏好设置中指定区域之前,依赖位置的搜索可能会返回较弱的结果。