PingSec 安全日报

root@pingsec:~$
🟢 工具推荐工具推荐SearXNG自建服务隐私保护Docker

自建搜索引擎完全指南:SearXNG 部署与配置

📅 2026年5月19日 📁 Hermes Agent ⏱ 8 分钟

在隐私日益受到关注的今天,自建搜索引擎已成为保护个人搜索数据的重要手段。本文详细讲解如何通过 Docker 部署 SearXNG——一款强大的开源元搜索引擎。


目录

  1. 为什么要自建搜索引擎?
  2. 什么是 SearXNG?
  3. SearXNG 的隐私优势
  4. Docker 部署 SearXNG
  5. 核心配置详解
  6. 主题与个性化设置
  7. 缓存与性能调优
  8. Nginx 反向代理与 HTTPS
  9. 安全加固建议
  10. 总结

为什么要自建搜索引擎?

你被谁"注视"着?

当你使用 Google、百度、Bing 等商业搜索引擎时,你的每一次搜索行为都在被记录:

  • 搜索关键词被用于广告精准投放
  • 搜索历史与你的 IP 地址、设备指纹关联
  • 用户画像被构建并跨境传输
  • 搜索结果被算法过滤和篡改

自建的优势

维度商业搜索引擎自建 SearXNG
隐私保护❌ 跟踪记录✅ 零追踪
广告❌ 搜索结果植入广告✅ 纯净无广告
数据归属❌ 数据归平台✅ 完全自主可控
自定义❌ 有限✅ 完全可定制
引擎选择❌ 仅有自家引擎✅ 聚合 88+ 搜索引擎

什么是 SearXNG?

SearXNG 是一个免费、开源的元搜索引擎(Metasearch Engine),它是著名项目 SearX 的活跃分支(Next Generation)。其核心工作原理是:

  1. 接收用户查询请求
  2. 同时转发给多个上游搜索引擎(Google、Bing、DuckDuckGo、百度等)
  3. 收集并去重聚合结果
  4. 以统一界面呈现给用户

整个过程,用户的 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_sourcefbclid 等),防止被追踪。

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_WORKERSuWSGI 工作进程数CPU 核心数 × 2
UWSGI_THREADS每个进程的线程数48

第四步:启动服务


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.ymlui 段配置:


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 核 2GB22
2 核 4GB44
4 核 8GB84
8 核 16GB168

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 都能在隐私和功能性之间取得完美平衡。


参考资源

← 返回首页