在隐私日益受到关注的今天,自建搜索引擎已成为保护个人搜索数据的重要手段。本文详细讲解如何通过 Docker 部署 SearXNG——一款强大的开源元搜索引擎。
目录
- 为什么要自建搜索引擎?
- 什么是 SearXNG?
- SearXNG 的隐私优势
- Docker 部署 SearXNG
- 核心配置详解
- 主题与个性化设置
- 缓存与性能调优
- Nginx 反向代理与 HTTPS
- 安全加固建议
- 总结
为什么要自建搜索引擎?
你被谁"注视"着?
当你使用 Google、百度、Bing 等商业搜索引擎时,你的每一次搜索行为都在被记录:
- 搜索关键词被用于广告精准投放
- 搜索历史与你的 IP 地址、设备指纹关联
- 用户画像被构建并跨境传输
- 搜索结果被算法过滤和篡改
自建的优势
| 维度 | 商业搜索引擎 | 自建 SearXNG |
|---|---|---|
| 隐私保护 | ❌ 跟踪记录 | ✅ 零追踪 |
| 广告 | ❌ 搜索结果植入广告 | ✅ 纯净无广告 |
| 数据归属 | ❌ 数据归平台 | ✅ 完全自主可控 |
| 自定义 | ❌ 有限 | ✅ 完全可定制 |
| 引擎选择 | ❌ 仅有自家引擎 | ✅ 聚合 88+ 搜索引擎 |
什么是 SearXNG?
SearXNG 是一个免费、开源的元搜索引擎(Metasearch Engine),它是著名项目 SearX 的活跃分支(Next Generation)。其核心工作原理是:
- 接收用户查询请求
- 同时转发给多个上游搜索引擎(Google、Bing、DuckDuckGo、百度等)
- 收集并去重聚合结果
- 以统一界面呈现给用户
整个过程,用户的 IP 地址、浏览器指纹等隐私信息不会被传递给任何上游搜索引擎。
核心特性
- 230+ 搜索引擎支持,覆盖网页、图片、视频、新闻、学术、文件等类别
- 零追踪——默认不设置 Cookie,不记录搜索历史
- 代理支持——可通过 Tor、SOCKS 等代理发送查询
- API 接口——提供 JSON 格式搜索结果 API
- 多主题——支持亮色/暗色/黑色主题,可定制
- 键盘快捷键——提升搜索效率
- 国际化——支持多语言界面
- Docker 原生支持——一键部署
SearXNG 的隐私优势
1. 无追踪、无画像
SearXNG 默认不存储任何用户数据。没有 Cookie、没有搜索历史、没有用户画像。你只是"借用"它去各个搜索引擎查询,然后拿到结果。
2. IP 地址保护
当 SearXNG 向上游搜索引擎发起请求时,使用的是服务器自己的 IP 地址,而不是你的真实 IP。Google 等服务商只能看到 SearXNG 实例的 IP,而非你的。
3. 可路由至 Tor 网络
通过配置代理,SearXNG 可经由 Tor 网络转发查询请求,实现搜索匿名化。
4. 去除 URL 追踪参数
内置的 tracker_url_remover 插件会自动清除搜索结果链接中的追踪参数(如 utm_source、fbclid 等),防止被追踪。
5. 强制 HTTPS 与安全标头
server:
default_http_headers:
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Robots-Tag: noindex, nofollow
Referrer-Policy: no-referrer
SearXNG 默认配置了严格的安全 HTTP 标头,阻止搜索引擎索引你的实例,并防止 Referer 泄露。
Docker 部署 SearXNG
环境要求
- Linux 服务器(推荐 Ubuntu 22.04+ / Debian 12+)
- Docker 和 Docker Compose V2
- 一个域名(可选,用于 HTTPS 公开访问)
第一步:创建目录结构
mkdir -p ~/searxng/core-config
cd ~/searxng
第二步:下载官方编排文件
curl -fsSL -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml
curl -fsSL -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
第三步:配置环境变量
编辑 .env 文件:
nano .env
关键变量说明:
| 变量 | 说明 | 示例值 |
|---|---|---|
SEARXNG_BASE_URL | 实例外部访问地址 | https://search.yourdomain.com |
SEARXNG_SECRET_KEY | 加密密钥(务必修改!) | 随机生成的 64 位字符串 |
UWSGI_WORKERS | uWSGI 工作进程数 | CPU 核心数 × 2 |
UWSGI_THREADS | 每个进程的线程数 | 4 或 8 |
第四步:启动服务
docker compose up -d
访问 http://你的服务器IP:8080 即可看到 SearXNG 界面。
验证部署
docker compose ps
docker compose logs -f core
核心配置详解
SearXNG 的主配置文件位于 core-config/settings.yml。以下是最重要的配置项。
启用默认配置并覆盖
最推荐的配置方式——启用默认配置,只覆盖你需要修改的部分:
use_default_settings: true
server:
secret_key: "你的超长随机密钥"
bind_address: "0.0.0.0"
base_url: "https://search.yourdomain.com"
limiter: true # 启用速率限制
public_instance: false # 非公共实例
image_proxy: true # 启用图片代理
method: "POST" # 使用 POST 请求保护隐私
搜索引擎配置
SearXNG 默认集成 88+ 个搜索引擎。你可以通过 settings.yml 灵活控制:
启用/禁用特定引擎
engines:
# 启用被禁用的引擎
- name: bing
disabled: false
# 移除不需要的引擎
- name: yandex
disabled: true
# 为引擎配置令牌(私有实例)
- name: arch linux wiki
tokens: ['your_token_here']
选择性保留引擎
use_default_settings:
engines:
keep_only:
- google
- duckduckgo
- bing
- wikipedia
- stackoverflow
移除特定引擎
use_default_settings:
engines:
remove:
- google
- bing
- yandex
建议:对于公开实例,移除 Google 和 Bing 等需要 API 的引擎,优先使用 DuckDuckGo、Brave、Mojeek 等更友好的引擎,以避免触发反爬机制。
搜索引擎分类
SearXNG 将搜索引擎分为以下类别:
| 类别 | 包含引擎示例 |
|---|---|
| 通用搜索 (general) | Google, Bing, DuckDuckGo, Brave, Startpage |
| 图片 (image) | Google Images, Bing Images, Flickr, DeviantArt |
| 视频 (video) | YouTube, Vimeo, Dailymotion, PeerTube |
| 新闻 (news) | Google News, Bing News, Wikinews, Reuters |
| 学术 (science) | Google Scholar, PubMed, arXiv, Semantic Scholar |
| 文件 (file) | PDF 搜索, 代码搜索 |
| 社交 (social) | Reddit, Twitter, Mastodon |
| IT (it) | StackOverflow, GitHub, GitLab, Docker Hub |
| 地图 (map) | OpenStreetMap, Qwant Maps |
搜索行为配置
search:
safe_search: 1 # 0=关闭, 1=温和, 2=严格
autocomplete: "duckduckgo" # 自动补全后端
autocomplete_min: 4 # 输入4个字符后触发自动补全
default_lang: "auto" # 默认语言自动检测
ban_time_on_fail: 5 # 引擎失败后禁用时间(秒)
formats:
- html
- json # 启用 JSON API
主题与个性化设置
更改默认主题为暗色
在 settings.yml 的 ui 段配置:
ui:
default_theme: simple
theme_args:
simple_style: dark # 可选: auto, light, dark, black
center_alignment: false # 搜索结果居中对齐
default_locale: "zh-Hans-CN" # 默认简体中文
search_on_category_select: true
url_formatting: pretty # pretty, full, host
hotkeys: default # 启用键盘快捷键
simple_style 值 | 效果 |
|---|---|
auto | 跟随系统主题 |
light | 强制亮色模式 |
dark | 暗色主题 |
black | 纯黑背景(省电模式,OLED 屏友好) |
实例品牌信息
general:
instance_name: "我的私有搜索"
privacypolicy_url: "https://yourdomain.com/privacy"
contact_url: "https://yourdomain.com/contact"
enable_metrics: false
锁定用户偏好
你可以锁定某些偏好设置,让用户无法修改:
search:
safe_search: 2
autocomplete: ""
ui:
static_path: ""
templates_path: ""
query_in_title: true
default_theme: simple
default_locale: "zh-Hans-CN"
# 锁定设置(通常注释掉)
# preferences:
# lock:
# - categories
# - language
# - autocomplete
# - method
# - safe_search
缓存与性能调优
1. Redis/Valkey 缓存
SearXNG 使用 Valkey(Redis 的开源替代)进行缓存和速率限制。配置方式:
在 docker-compose.yml 中添加 Valkey 服务:
services:
valkey:
container_name: searxng-valkey
image: docker.io/valkey/valkey:8-alpine
command: valkey-server --save 30 1 --loglevel warning
restart: unless-stopped
volumes:
- "valkey-data:/data"
cap_drop:
- ALL
cap_add:
- SETGID
- SETUID
- DAC_OVERRIDE
- CHOWN
healthcheck:
test: ["CMD", "valkey-server", "--version"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
volumes:
valkey-data:
在 settings.yml 中启用:
valkey:
url: "valkey://valkey:6379/0"
2. 内部缓存机制
SearXNG 内置了 ExpireCache 缓存系统,使用 SQLite 实现。配置项:
# 默认配置(位于代码层面,无需手动设置)
# MAX_VALUE_LEN: 10240 # 缓存值最大长度
# MAXHOLD_TIME: 604800 # 缓存保留时间(7天)
# MAINTENANCE_PERIOD: 3600 # 维护周期(1小时)
缓存文件默认存储在 /var/cache/searxng/ 目录。
3. uWSGI 性能调优
通过环境变量调整 uWSGI 参数:
# .env 文件
UWSGI_WORKERS=4
UWSGI_THREADS=4
调优建议:
| 服务器配置 | 推荐 Workers | 推荐 Threads |
|---|---|---|
| 1 核 2GB | 2 | 2 |
| 2 核 4GB | 4 | 4 |
| 4 核 8GB | 8 | 4 |
| 8 核 16GB | 16 | 8 |
4. 连接池优化
outgoing:
request_timeout: 3.0 # 请求超时(秒)
max_request_timeout: 10.0 # 最大请求超时
pool_connections: 100 # 连接池大小
pool_maxsize: 20 # 最大保持连接数
enable_http2: true # 启用 HTTP/2
useragent_suffix: "" # 用户代理后缀
5. 限制搜索引擎数量
性能最大杀手是:同时查询太多慢速引擎。建议:
- 保留 10-15 个核心搜索引擎,而非全部启用
- 移除响应慢的引擎(如某些学术搜索引擎)
- 使用不同类别的引擎组合:通用+图片+新闻各选 3-5 个
示例——只保留高效的引擎:
use_default_settings:
engines:
keep_only:
- duckduckgo
- brave
- mojeek
- wiby
- wikipedia
- wikidata
- wikinews
- stackoverflow
- github
- reddit
6. 缓存 favicon
设置 favicon 解析器可减少加载延迟:
search:
favicon_resolver: "duckduckgo"
Nginx 反向代理与 HTTPS
为了让 SearXNG 支持 HTTPS,推荐使用 Nginx 反向代理 + Let's Encrypt。
Nginx 配置示例
server {
listen 443 ssl;
server_name search.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/search.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/search.yourdomain.com/privkey.pem;
# 安全增强
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 禁用缓冲提升实时性
proxy_buffering off;
proxy_request_buffering off;
}
# 禁用访问日志(隐私考虑)
access_log /dev/null;
error_log /dev/null;
}
server {
listen 80;
server_name search.yourdomain.com;
return 301 https://$server_name$request_uri;
}
使用 Certbot 获取证书
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d search.yourdomain.com
Docker 网络配置说明
确保 SearXNG 和 Nginx 在同一个 Docker 网络或通过宿主机通信。最简单的方式:让 Nginx 直接通过宿主机的端口转发:
# docker-compose.yml 中将 SearXNG 绑定到宿主机
ports:
- "127.0.0.1:8080:8080"
这样 Nginx 可通过 http://127.0.0.1:8080 代理流量。
安全加固建议
1. 修改密钥
部署后第一件事——修改 secret_key:
# 生成 64 位随机密钥
openssl rand -hex 64
2. 启用速率限制
防止被滥用:
server:
limiter: true
public_instance: false
3. 限制访问来源
仅允许特定 IP 或网络访问(Nginx 层面):
location / {
allow 192.168.1.0/24; # 内网
allow 你的家里宽带IP;
deny all;
proxy_pass http://127.0.0.1:8080;
}
4. Docker 安全配置
services:
searxng:
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
security_opt:
- no-new-privileges:true
5. 使用 POST 方法提交搜索
server:
method: "POST"
这样搜索关键词不会出现在 URL 中,防止浏览器历史记录和服务器日志泄露。
6. 更新维护
定期更新 SearXNG 镜像:
docker compose down
docker compose pull
docker compose up -d
7. 搜索引擎最佳选择(隐私优先)
以下搜索引擎对自建实例友好,不要求 API Key:
| 引擎 | 类别 | 隐私等级 | 备注 |
|---|---|---|---|
| DuckDuckGo | 通用 | ⭐⭐⭐ | 零追踪,响应快 |
| Brave Search | 通用 | ⭐⭐⭐ | 自建索引 |
| Mojeek | 通用 | ⭐⭐⭐ | 独立索引 |
| Qwant | 通用 | ⭐⭐⭐ | 欧洲隐私法规 |
| Startpage | 通用 | ⭐⭐⭐ | Google 结果匿名化 |
| Wikipedia | 百科 | ⭐⭐⭐ | 开放知识库 |
| Wikinews | 新闻 | ⭐⭐⭐ | 开源新闻 |
| LibreX | 元搜索 | ⭐⭐⭐ | 注重隐私 |
| Marginalia | 通用 | ⭐⭐⭐ | 非商业索引 |
常见问题与排错
Q: 搜索结果不完整?
A: 可能是某些引擎被临时禁用了。检查 docker compose logs core 查看具体错误。
Q: 搜索速度太慢?
A: 减少启用的搜索引擎数量;调低 request_timeout 值;确保启用了 Valkey 缓存。
Q: 如何备份配置?
A: 备份整个 core-config/ 目录以及 docker-compose.yml 和 .env 文件。
Q: 能否在低配 VPS 上运行?
A: 可以。SearXNG 非常轻量,1 核 1GB 的 VPS 即可流畅运行。推荐配置:2 核、2GB 内存。
总结
SearXNG 是目前最优秀的自建搜索引擎方案之一。通过本文的指南,你已经学会了:
- ✅ 理解元搜索引擎的工作原理和隐私优势
- ✅ 使用 Docker 一键部署 SearXNG
- ✅ 配置 88+ 个搜索引擎,按需启用/禁用
- ✅ 设置暗色主题和个性化界面
- ✅ 调优缓存和性能参数
- ✅ 配置 Nginx 反向代理和 HTTPS
- ✅ 实施安全加固措施
隐私不是一种特权,而是一种权利。自建搜索引擎,就是对自己的数据主权负责。
自建 SearXNG 后,你将拥有一个无广告、无追踪、完全自主可控的搜索入口。无论是在个人电脑上使用,还是部署为团队内部搜索工具,SearXNG 都能在隐私和功能性之间取得完美平衡。