SearXNG安全吗?公共实例和自建服务器谁能看到查询
SearXNG会用服务器IP向搜索引擎发起请求,但公共实例运营者仍可看到明文查询;自建VPS也无法隐藏ISP、DNS或服务器日志中的访问记录。
SearXNG 安全吗?简短回答
SearXNG 在某些方面安全,在另一些方面不安全。因此,只有先说明您要隐藏的对象,问题“ SearXNG 是否安全”才有明确答案。SearXNG 是元搜索引擎:它接收您的查询,将查询发送到 Google、Bing、DuckDuckGo 以及您启用的其他搜索引擎,然后把返回结果合并到一个结果页面中。各搜索引擎看到的是该实例。该实例看到的是您。
如果使用陌生人运行的公共实例,对方会收到您输入的每一条查询,而且内容是明文。该实例的 about 页面无法证明对方会如何处理这些查询。如果使用自己的服务器,上游搜索引擎看到的是服务器地址,而不是您的家庭地址。这种替换就是隐私保护的全部作用,其价值完全取决于运行该实例的服务器。
这不会让您在自己的网络中隐藏搜索行为。您的互联网服务提供商(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(传输层安全)在此处终止。下面的每一点都源于这一事实。
公共实例上的运营者可以看到每个查询
项目自身的文档对此有明确说明:公共实例的用户“必须信任该实例的管理员”,而且无法知道“他们的请求是否会被记录、汇总,并发送给或出售给第三方”。登录页上的无日志声明仍然只是声明。外部无法验证这一点,因此只能选择信任,否则就无法使用。部分公共实例仍运行原版 Searx,而不是这个分支。这一点很重要,因为 Searx 自 2023 年以来没有提交任何代码,而无人维护的搜索软件又增加了一项只能盲目信任的内容。
记录查询也是最省事的做法,因为软件发布的默认配置会将查询放入 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 提供商负责运行硬件,因此可以读取虚拟机的磁盘和内存。在租用的虚拟机内部进行磁盘加密无法解决这一问题,因为运行中的系统持有密钥。
- 在实例上拥有 root 权限的任何人都能看到全部内容。这包括您,也包括之后获取该权限的人。
通过 Tor onion service 访问实例可以消除前两项暴露,因为不再需要解析公网主机名,也没有可读取的 SNI 字段。向 VPS 添加 v3 onion service 的操作指南介绍了配置方法,以及如何处理否则会将该地址关联回您服务器公网 IP 的泄漏。
还有一点经常被忽略。服务器的出站请求会从服务器自身的网络中暴露,因此您的提供商可以看到您的机器整天与 Google 和 Bing 通信。这属于流量模式,而不是查询,但仍会暴露部分信息。
这就引出了 VPN 问题。VPN(虚拟专用网络)会将 ISP 能看到的内容转移为 VPN 公司能看到的内容。它不会改变实例运营方能看到的内容,也不会改变搜索引擎能看到的内容,因为搜索引擎连接的是您的服务器,而不是您本人。两者的区别详见VPS 与 VPN 的对比。
SearXNG 为什么会阻止请求,以及 429 的实际含义
“被 SearXNG 阻止”可能指两种不同的情况,修复方法也不同。
第一种情况是 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 logger 写入 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。
第二种阻止发生在上游。某个引擎可能判断来自数据中心、执行大量搜索的地址属于 scraper,然后停止向您的服务器响应。此时不会收到 429,而是得到一个缺少该引擎结果的结果页面,并看到针对该引擎记录的失败。连续失败后,SearXNG 还会暂时停用该引擎。原因在于 VPS 使用的地址,因此修复方法是选择其他引擎并等待,而不是调整限流器。
与陌生人共享实例有帮助还是有害?
两方面都有,而且方向相反,因此答案并不简单。匿名性来自群体效应。在繁忙的公共实例上,您的查询与成千上万名其他用户的查询使用同一个地址发出,因此任何搜索引擎都无法从中单独识别您的查询。在单用户实例上,来自该地址的每个查询都属于您,搜索引擎会收到一串干净的单用户请求,但不会获得您的姓名。
从运营者的角度看,情况正好相反。人数众多意味着陌生人会持有整个群体的明文查询,其中包括您的查询。使用您自己的服务器时,您只持有自己的查询,不会持有其他人的查询。
因此,应根据您实际面临的威胁进行选择。如果您担心广告画像和跨站跟踪,群体可以有效降低这类风险,而运营者风险较小。如果您担心某个特定个人或公司读取您执行的某个具体搜索,群体完全无法提供帮助,因为运营者可以看到原始文本。一个较好的折中方案是与少数您认识的人共享实例。这样既能获得小规模群体,也能验证运营者,因为运营者就是您自己。
SearXNG 的结果比 Google 更好吗?
不一定。SearXNG 没有自己的索引,因此页面上的每条结果都来自上游搜索引擎,结果质量的上限取决于您启用的搜索引擎。如果禁用 Google 和 Bing,质量会当天下降,因为大多数通用 Web 内容都由它们提供。
变化在于搜索引擎如何处理您的请求。没有任何组件会根据查询内容建立广告画像,也不会根据您上周点击过的内容重新排列结果。这种变化有利有弊,因为个性化也能提供本地搜索意图。例如,通过 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 发出的消息。其实例探测会标记缺少 text/html 的 Accept 请求头,以及未设置或匹配 curl、wget 等工具的 User-Agent。第三项探测是链接令牌:如果客户端从未获取浏览器加载的 /client<token>.css URL,也会被标记。若反向代理未在 /etc/searxng/limiter.toml 的 trusted_proxies 中配置,所有访客都会被计为同一个客户端,因此一个繁忙用户就可能阻塞其他用户。如果是上游搜索引擎封锁了您的服务器,该引擎的结果只会从页面中消失,您不会收到 429。
自托管 SearXNG 会使搜索结果变差吗?
有时会,原因有两个。结果来自上游搜索引擎。如果这些引擎限制数据中心地址,能返回结果的引擎就会减少,结果页面也会更单薄。其次,个性化排名会消失。这既消除了广告驱动的结果重排,也消除了本地搜索意图。因此,具有地域相关性的搜索会返回较弱的结果,直到您在偏好设置中配置所在地区。