导读:本站隐私向的自托管已经攒了一小排:AdGuard Home管住了DNS层,Immich收回了相册,Gitea收回了代码——但互联网使用里最高频、也最暴露的一件事还悬着:搜索。你搜过的病、搜过的人名、搜过的"怎么跟老板提离职"——每一次搜索都在给搜索引擎巨头画一张比你自己还了解你的画像。SearXNG是这个问题目前最优雅的解:一个自己部署的元搜索引擎,把Google、Bing、DuckDuckGo等几十家引擎的结果聚合去重,而它本身不存用户数据、不上报、不画像。这篇讲透:搜索隐私的真实代价、元搜索的原理、Docker五分钟部署、引擎选择与权重调校、设为浏览器/手机默认搜索的姿势、公共实例与自建实例的差别、小鸡IP被上游限流的应对、以及它的能力边界——自建搜索这件事,体验上能打几分,隐私上值回几倍。
一、搜索画像:你以为在搜索,其实在被画像
先量化一下"搜索暴露"这件事的严重程度。搜索引擎是大多数人的互联网入口:想什么搜什么、怕什么查什么、买什么比什么——搜索关键词是意愿最赤裸的表达。而主流搜索引擎的商业模式决定了:这些查询不会用完即弃——账号体系(登录着邮箱的那位)把搜索和身份绑定;广告ID把搜索和浏览行为串联;查询历史是推荐系统里权重最高的信号之一。"我搜过的东西它怎么全知道"的体感,背后是一整套实时竞价广告网络在互相喂料。对国内用户还有一层:搜索引擎的市场集中度更高,画像的颗粒度只增不减。有人说"我又没搜什么见不得人的"——那换个角度想:入职体检前搜的病名、深夜搜的婚姻法律咨询、给父母搜的药品价格——这些查询每一条都无害,合在一起就是一份你自己都不敢细看的心理档案。而这档案的保管方,是一家以卖广告为主业的公司。DNS有AdGuard Home把关(查询域名先过你家关卡),聊天有Ollama本地跑(对话不出机器)——搜索作为高频入口,是隐私自托管版图上剩下的最大一块空白,SearXNG补的就是它。
二、元搜索原理:站在引擎肩膀上的中间层
SearXNG(SearX的社区维护分叉,NG=Next Generation)的架构思路叫"元搜索"(metasearch):它自己不爬网、不建索引,而是把你的查询词同时转发给N个上游引擎,把各家返回的结果聚合成一页。你搜"VPS推荐",它同时问Google、Bing、Brave、DuckDuckGo、维基百科……拿到各家的前几条,去重、按规则重排、统一渲染——对你来说这就是一个正常的搜索结果页,但上游引擎看到的是"SearXNG服务器的IP发来了一次查询",看不到你。隐私模型的关键在三点:其一,查询与你解绑——上游收到请求的IP是你的服务器(或公共实例)而非你本人,没有账号、没有Cookie、没有浏览器指纹;其二,SearXNG自身零持久化——设计上就不落盘任何查询记录,配置里连日志都可以关到最小,它是个"哑巴管道";其三,聚合本身是一种混淆——任何单一上游看到的只是你的部分流量,完整的搜索行为分布不存在于任何一家的数据库里。副作用也说实话:元搜索天然慢半拍(要等上游返回)、结果排序没有巨头那种个性化魔法(搜出来的东西千人一面——但"千人一面"换个说法就叫"不给你画像",这本来就是目的)。想通了"我宁可搜索慢0.5秒、结果朴素一点,也要把画像收回来"这个trade-off,SearXNG就值得部署了。
三、部署:Docker五分钟起一个
SearXNG的Docker部署是标准姿势(Compose篇的老配方):
services:
searxng:
image: searxng/searxng
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng
environment:
- SEARXNG_BASE_URL=https://search.example.com/
restart: unless-stopped
起来后浏览器访问8080端口,一个干净的搜索框就绪——什么广告、什么热搜榜、什么信息流,统统没有,只有一个框,这种"工具感"本身就令人心旷神怡。两处必改配置(挂载目录里的settings.yml):secret_key改成随机长串(默认安装器会生成,手动部署别漏——这个key用于会话加密); limiter(限流器)对自用场景可以关掉(它防的是公共实例被人当API薅,自己家用的开反而碍事)。对外发布的标准动作照旧:Nginx反代8080端口(反代篇),套Let's Encrypt证书(HTTPS篇),域名解析过来(DNS解析篇的A记录)——`https://search.example.com`,一个属于自己的搜索首页就上线了。手机上打开这个网址,添加到主屏幕,PWA形态用起来和APP没差。资源占用小得感人:内存100-200MB,CPU闲时几乎为零——1G内存的小鸡跑它毫无压力,甚至可以和别的服务挤一台机器(SearXNG是那种"顺手就能养一个"的轻量服务)。
四、引擎调校:聚合谁、怎么排、怎么关
SearXNG默认开着一组引擎(Google、Bing、DDG、Wikipedia等),但它的真功夫在"可调"二字——settings.yml里几十家引擎随你开关配权。基础调校:中文用户的必开项是百度和搜狗(中文内容生态里它们有独家索引,聚合进来中文结果质量明显上台阶);Google和Bing保持开启(英文与综合质量担当);Wikipedia开(知识类查询直接给百科卡片段落)。权重与排序:每家引擎可以设weight(权重)和timeout(超时)——中文为主的场景给百度搜狗更高权重,英文场景维持Google高权重;timeout建议压到3秒内——慢引擎拖垮整页响应是元搜索的常见病,宁可缺一家结果也别等它8秒。分类与快捷语法:SearXNG支持`!bang`语法(和DDG同款)——`!b 关键词`直接跳Bing搜、`!zh.wikipedia 关键词`直接查中文维基、`!yt 关键词`直接搜YouTube——习惯了这个语法后,"搜索引擎切换器"这个功能都省了;页面顶部的分类标签(网页/图片/视频/新闻/地图)也是聚合级别的——图片搜索是同时抓多家图源的结果,找图体验意外地好。隐私相关开关:设置页里可以逐项关闭对上游的请求头传递(禁用上游Cookie、伪造Referer),配置文件里还有"不出站追踪"相关的细节项——默认配置已经很干净,有洁癖可以逐项审。调校完的检验方法:搜一个中文词看百度结果有没有进来、搜一个英文词看Google质量在不在、随便搜个啥看响应时间——三项都过关,这台搜索引擎就毕业了。
五、设为默认:浏览器和手机的全局接管
部署好只是第一步,让它成为"默认"才有价值。桌面浏览器:Chrome/Edge在设置→搜索引擎→管理搜索引擎里,添加自定义站点搜索——名称随便、关键词随便、URL填`https://search.example.com/search?q=%s`,然后设为默认——从此地址栏敲任何词都走你的实例;Firefox原生支持添加自定义搜索引擎更方便。手机:Android的Chrome同样支持自定义搜索引擎(设置→搜索引擎→添加);iOS的Safari不开放自定义默认引擎(苹果的围墙花园),但两步走可以逼近:把SearXNG添加到主屏幕(PWA形态,全屏无浏览器栏),日常搜索养成打开它的习惯;再把地址栏搜索尽量换成Spotlight+SearXNG书签。全家共用:家里路由器的DHCP顺手做的事——AdGuard Home篇讲过DNS层面的管控,但搜索是应用层,改不了全局默认——最务实的方案是给家人手机都装上这个PWA+教一次"以后搜东西点这个图标"——受益的不只是隐私,还有全家统一的干净搜索体验(无广告、无信息流干扰)。进阶:JSON API——SearXNG自带`/search?format=json`接口,开启后它就是一个可编程的搜索后端:写脚本批量查资料、给Ollama接个联网搜索的Tool(让本地大模型"能上网",Ollama篇的进阶玩法)、给自己写个快捷指令(iOS Shortcuts调SearXNG,Siri说"搜索XX"直接出结果)——一个自建搜索能玩出的花样,比想象中多得多。
六、限流与自愈:小鸡IP被上游盯上怎么办
自建实例的头号运维烦恼:上游引擎的反爬。你一个人的查询量当然无害,但同一个服务器IP高频调用Google,会被判定为机器人——返回验证码页面或直接拒绝,SearXNG侧的表现是"Google这家引擎结果变少/消失"。三层应对:第一层,靠架构——SearXNG的多引擎设计本身就是容错:Google被限了,Bing、DDG、百度还在顶着,聚合结果只是"少了几条"而不是"整个没法用"——元搜索的皮实程度远超单一引擎;把被限引擎的timeout压短,坏引擎快速跳过,页面响应不受拖累。第二层,靠分散——给自己的不同场景用不同实例:家里跑一个、小鸡跑一个、再混用一两个口碑好的公共实例(searx.be、searx.tiekoetter.com这类老牌站),单一实例对上游的压力摊薄,体验更稳。第三层,靠上游多样性——引擎清单里养几家"不那么主流但抗用"的:Brave Search(独立索引、API慷慨)、Mojeek(真正的独立引擎、几乎不限流)、Startpage(Google结果的代理皮)——把它们的权重抬高一点,主力引擎被限时它们顶上。还有个反直觉的发现值得分享:小鸡的IP信誉很重要——数据中心IP段本来就被引擎重点提防(共享IP上不知多少人跑过爬虫),一台"干净"的机器(没跑过任何爬虫任务)的限流概率远低于一台跑过采集脚本的机器——所以别把SearXNG和爬虫任务塞同一台小鸡,这是隐性但真实的运维常识。最后的心态建设:自建搜索偶尔缺几家引擎的结果属于正常损耗,第二天自己就恢复了(引擎的限流普遍按时间窗解除)——为隐私付的这点小代价,划算。
七、公共实例还是自建:一笔诚实对比账
"searx.be这些公共实例免部署直接用,我为什么还要自己搭一个?"——值得认真回答的问题,答案是信任与可控。公共实例的短板:第一,信任假设回到了原点——你把查询交给了实例的主人,从"不信任Google"变成"信任某个陌生站长"——虽然SearXNG架构上不存日志,但实例主人改改代码、加个日志,你在技术上无从知晓(开源不等于运行的实例没被改过);第二,稳定性听天由命——公共实例普遍被薅(被当免费API调用),限流、过载、关站是日常,searx实例的存活率以年计惨烈;第三,性能看缘分——高峰期响应慢悠悠,体验参差。自建的长板:查询只经过你和上游两方(信任链最短);部署成本五分钟+月成本小鸡上的一点内存(本来就有机器,边际成本近乎零);性能自己说了算(还可以按第五节深度调校——公共实例可不会为你把百度权重调高)。混合策略(很多玩家的实际选择):自建为主(日常默认),公共实例为辅(自建维护窗口期的备用),再加一个DuckDuckGo官方做终极兜底——三层冗余,搜索这个刚需永不掉线。结论很清晰:有VPS的人,自建是唯一合理选择——你都已经在自己的机器上跑了十个服务了,没理由让"搜索"这个最高频的入口继续寄人篱下。
八、能力边界:它给你的和不给你的
诚实清单,避免期望错位。它给你的:聚合多方引擎的结果(质量往往好于单一引擎)、零画像的搜索体验(查什么不留什么)、可编程的JSON接口(自动化场景的入场券)、全家统一的干净搜索入口、以及"搜索主权"这个说法的落地感。它不给你的:其一,匿名性≠隐身术——SearXNG保护的是"搜索引擎不知道是谁在搜",但你点进搜索结果后访问的那个网站,看到的是你的真实IP——上网的隐私是分层洋葱,搜索这层包好了,浏览那层要靠别的(浏览器隔离、VPN/代理那套,不在本篇范围);其二,没有个性化魔法——巨头的搜索会根据你的历史"越用越懂你",SearXNG永远给你千人一面的朴素结果——搜专业术语时你会想念那个"懂你"的Google——这是隐私的代价,认了就值;其三,实时性与深度内容——聚合的是各家的网页索引,垂直领域的搜索(代码搜GitHub、商品搜淘宝、学术搜谷歌学术)有专门的bang语法跳转可以补,但聚合页本身不覆盖;其四,反爬是一场持久战——第六节讲了,接受它,把它当服务器的日常天气。把这些边界摆清楚后再回答那个终极问题:值不值?——对一个每天搜索几十次、且明白"搜索历史=心理档案"含义的人,五分钟部署换一个不设防入口的关闭,这可能是自托管清单里投产比最高的一单。
结语
从AdGuard Home的DNS关卡到Ollama的本地对话,本站的隐私拼图一块块凑齐——这块"搜索"补上后,互联网三大高频行为(解析、对话、搜索)就全走自己的通道了。SearXNG的好玩之处在于它完全不像个"隐私工具"那么沉重:聚合多引擎的结果质量、!bang的快捷语法、JSON接口的可玩性,让它作为"工具"本身就成立——隐私只是它顺手送你的那份大礼。今晚五分钟把它拉起来,浏览器默认搜索引擎一改,明天开始你搜的每一个词都只属于自己;一周后你会忘掉它的存在——最好的基础设施就是这样:默默工作,从不索取,也从不背叛。


