SearXNG:VPSに構築する追跡のない自分専用検索エンジン
一般的な検索エンジンは、検索リクエストをIPアドレス、Cookie、操作履歴と関連付けることができます。SearXNGは通信経路を変えます。ブラウザは自分のインスタンスにアクセスし、そのインスタンスが複数の外部検索エンジンへ問い合わせ、回答を1つのページにまとめます。
外部の検索元に見えるのはSearXNGサーバーのアドレスであり、ユーザーのCookieではありません。サービス自体も広告用プロフィールを作成しません。ただし、完全な匿名性が得られるわけではありません。公開インスタンスの管理者は技術的にはログを保存でき、検索結果のリンクを開いた後は、移動先のサイトが再びブラウザと直接やり取りします。
ここではSearXNGの機能を確認し、HTTPSとパスワード保護を備えた自分専用のインスタンスをVPSにインストールします。
SearXNGとは何か、どのように動作するのか
SearXNGは無料でオープンソースのメタ検索エンジンです。独自のWebサイト索引は持たず、設定された検索エンジンや専門的な情報源から結果を取得し、形式を統一して1つの画面に表示します。
ブラウザ → 自分のSearXNG → 検索エンジン
↓
統合結果検索のたびに、SearXNGは次の処理を行います。
- Web、画像、ニュース、動画などの検索カテゴリを判定します。
- サーバーを代理として、選択された検索元へ問い合わせます。
- ユーザーのCookieを検索元へ送信せず、外向きのリクエストにはランダムなブラウザプロファイルを使用します。
- 返された回答を1つの検索結果ページにまとめます。
速度は外部システムに左右されます。応答が遅い場合や、CAPTCHAが表示される場合、IPアドレスがブロックされる場合があります。SearXNGは制御可能な中間層であり、独立した検索索引ではありません。
SearXNGが単一の検索エンジンより魅力的な理由
異なる検索元を1つの結果ページに統合
一般的な検索エンジンと、百科事典、地図、学術論文、リポジトリ、ニュース、画像カタログなどの専門的な情報源を組み合わせられます。通常の検索結果がSEOページで埋め尽くされている場合や、ニッチな資料を見つけにくい場合に役立ちます。
この記事を作成した時点で、ドキュメントには272種類の統合が掲載され、そのうち83種類が初期状態で有効になっていました。ただし、すべてが同じように安定しているわけではありません。
使用する検索元は設定によって変わります。利用可能なものをすべて同時に有効にするより、安定した検索元を少数選ぶほうが通常は高速です。
クイックコマンド
短縮コマンドを使うと、検索エンジン、カテゴリ、言語を一時的に指定できます。
!wp docker compose — Wikipediaで検索
!images オーロラ — 画像を検索
:ja !wp プロキシサーバー — 日本語でWikipediaを検索!!コマンドは、ユーザーを外部検索エンジンへ直接転送します。このモードではSearXNGの保護は適用されません。
ブラウザや独自ツールのための検索
SearXNGはOpenSearchに対応しているため、ブラウザの既定の検索エンジンとして設定できます。また、管理者が必要な形式を許可していれば、JSON、CSV、RSS形式で応答するHTTP APIも利用できます。
1つのインスタンスを、社内ダッシュボード、ボット、調査用スクリプト、ローカルAIアシスタントの検索バックエンドとして利用できます。APIは認証とリクエスト制限を設定した後にのみ公開するのが安全です。
SearXNGのプライバシー保護はどの程度か
| できること | できないこと |
|---|---|
| ブラウザのCookieを外部検索エンジンへ送信しない | 完全な匿名性は提供しない |
| ユーザーのIPをサーバーのIPで隠す | 検索結果のサイトを開いた後は保護しない |
| 外部広告と一部の追跡パラメータを除去する | 他人のサーバーの管理者がログを保存していないとは保証しない |
| 画像をプロキシ経由で読み込める | VPN、Tor、ブラウザ保護の代わりにはならない |
公開インスタンスは試用には便利ですが、管理者を信頼する必要があり、共有IPは制限を受けやすくなります。
自分のサーバーならログ、検索元、アクセスを管理できますが、ブラウザ自体が匿名になるわけではありません。
公開インスタンス、自宅サーバー、VPSの比較
| 選択肢 | メリット | 制約 |
|---|---|---|
| 公開インスタンス | 何もインストールする必要がない | 管理者への信頼、過負荷、CAPTCHA |
| 自宅サーバー | VPSを借りずに完全に管理できる | デバイスを常時稼働させる必要があり、外部アクセスの設定が難しい |
| 自分のVPS | 24時間稼働、ドメイン、HTTPS、複数端末からのアクセス | コンテナの更新とセキュリティ管理が必要 |
自分専用のSearXNGは、家族、チーム、開発者、ローカルAIツールに役立ちます。たまに検索するだけなら公開インスタンスのほうが簡単です。
SearXNGに必要なVPS構成
負荷はユーザー数、検索元、同時リクエスト数によって変わります。実用的な初期構成は次のとおりです。
| 利用シナリオ | CPU | RAM | ディスク |
|---|---|---|---|
| 1人で利用 | 1 vCPU | 1 GB | 10 GB |
| 家族または小規模チーム | 2 vCPU | 2 GB | 20 GB |
| APIと追加サービス | 2~4 vCPU | 4 GB以上 | 30 GB以上 |
大容量ディスクは必要ありません。ネットワーク品質、固定IP、RAMの余裕のほうが重要です。
この用途にはtropic.hostのLinux VPSが適しています。小さな構成から始め、ユーザーやAPI利用が増えたらリソースを拡張できます。プランを選ぶときは、ストレージ容量に余分な費用をかけるより、RAMとネットワーク品質を優先するほうが有効です。
Docker Composeを使ってVPSにSearXNGをインストールする
この例ではUbuntu 24.04 LTS、search.example.com、Valkey、Caddyを使用します。DNSのAレコードをサーバーへ向け、ポート80と443を開放してください。
1. Dockerをインストールしてディレクトリを作成する
sudo apt update
sudo apt install -y docker.io docker-compose-v2 openssl
sudo systemctl enable --now docker
sudo mkdir -p /opt/searxng/searxng
cd /opt/searxngドメインとランダムなシークレットを含む.envファイルを作成します。
printf 'SEARXNG_HOSTNAME=search.example.com\nSEARXNG_SECRET=%s\n' \
"$(openssl rand -hex 32)" | sudo tee .env >/dev/null
sudo chmod 600 .env2. docker-compose.ymlを作成する
name: searxng
services:
searxng:
image: docker.io/searxng/searxng:latest
restart: unless-stopped
environment:
SEARXNG_BASE_URL: https://${SEARXNG_HOSTNAME}/
SEARXNG_SECRET: ${SEARXNG_SECRET}
SEARXNG_VALKEY_URL: valkey://valkey:6379/0
volumes:
- ./searxng:/etc/searxng:rw
- searxng-cache:/var/cache/searxng
depends_on: [valkey]
valkey:
image: docker.io/valkey/valkey:9-alpine
restart: unless-stopped
command: valkey-server --save 30 1 --loglevel warning
volumes:
- valkey-data:/data
caddy:
image: docker.io/caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
environment:
SEARXNG_HOSTNAME: ${SEARXNG_HOSTNAME}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
depends_on: [searxng]
volumes:
searxng-cache:
valkey-data:
caddy-data:
caddy-config:3. SearXNGを設定する
searxng/settings.ymlを作成します。
use_default_settings: true
general:
instance_name: "Private Search"
search:
safe_search: 1
autocomplete: ""
formats: [html]
server:
limiter: true
image_proxy: true
valkey:
url: valkey://valkey:6379/0searxng/limiter.tomlを作成します。
[botdetection]
trusted_proxies = [
"127.0.0.0/8",
"::1",
"172.16.0.0/12",
]Limiterは、ボットがインスタンスを過負荷にし、外部検索エンジンがそのIPアドレスを早期に制限するリスクを下げます。
4. パスワードとHTTPSを追加する
強力なパスワードのハッシュを生成します。
sudo docker run --rm caddy:2-alpine \
caddy hash-password --plaintext 'パスワードを置き換える'生成されたハッシュをCaddyfileに挿入します。
{$SEARXNG_HOSTNAME} {
basic_auth {
searchuser ここにハッシュを挿入
}
reverse_proxy searxng:8080 {
header_up X-Real-IP {remote_host}
}
}Caddyが保存するのは平文のパスワードではなくハッシュです。Basic Authの代わりに、VPN内からのみアクセスできるようにすることもできます。
5. コンテナを起動する
sudo docker compose config
sudo docker compose pull
sudo docker compose up -d
sudo docker compose pshttps://search.example.comを開きます。CaddyがTLS証明書を自動取得し、その後ブラウザがユーザー名searchuserとパスワードを要求します。SearXNGのログは次のコマンドで確認できます。
sudo docker compose logs -f searxng起動後に設定すること
必要な検索元だけを残し、言語とSafeSearchを選択してから、OpenSearchを通じてSearXNGをブラウザに追加します。更新は次のコマンドだけで行えます。
sudo docker compose pull
sudo docker compose up -d.env、Caddyfile、searxngディレクトリをバックアップしてください。JSON APIは必要な場合にのみ有効にし、パスワードやリクエスト頻度制限なしで公開しないでください。
よくある間違い
| 間違い | 結果 | 解決策 |
|---|---|---|
| インスタンスを誰にでも公開する | ボットが負荷を発生させ、IPが制限されやすくなる | パスワード、VPN、シングルサインオンを使う |
| 検索元を有効にしすぎる | 結果表示が遅くなり、タイムアウトが発生する | 安定した検索エンジンを少数だけ残す |
| SearXNGを独自索引だと考える | 外部システムに障害が起きると一部の結果が消える | 検索元への依存を考慮する |
| 完全な匿名性を期待する | 検索結果のサイトは引き続きブラウザを追跡できる | ブラウザ保護、VPN、Torを使う |
| HTTPSなしで実行する | 検索リクエストとパスワードが安全でない状態で送信される | TLS対応のリバースプロキシを使う |
まとめ
SearXNGは異なる検索元を1つの画面にまとめ、パーソナライズの影響を減らし、ブラウザ、スクリプト、ローカルAIに共通の検索機能を提供します。試すだけなら公開インスタンスで十分です。継続的に使うなら、HTTPS、認証、limiter、少数の安定した検索元を備えた自分のサーバーが適しています。
最初は1 GBのRAMで始められます。ユーザー数が増えたとき、APIを接続するとき、追加のコンテナを実行するときにリソースを増やしてください。
FAQ
SearXNGは完全に匿名ですか?
いいえ。外部検索エンジンから一部のデータを隠しますが、インスタンスの管理者はログを保存できます。サイトを開いた後は、そのサイト独自の追跡手段が適用されます。
SearXNGはGoogleより優れていますか?
解決する課題が異なります。Googleは通常より高速で、検索結果を強くパーソナライズします。SearXNGは制御性が高く、複数の検索元を組み合わせられ、ユーザープロファイルへの依存も少なくなります。
VPSなしでもSearXNGを利用できますか?
はい。公開インスタンス、自宅のパソコン、NAS、ミニサーバーを利用できます。VPSは、どのネットワークからでも24時間アクセスできる環境を用意するために必要です。
必要なRAM容量はどのくらいですか?
1人で使うなら1 GBから始めるのが現実的です。家族、チーム、API、追加コンテナで利用する場合は2~4 GBが適しています。
SearXNGをブラウザやAIに接続できますか?
はい。ブラウザはOpenSearchを利用でき、プログラムはHTTP APIを利用できます。APIへのアクセスは認証とlimiterで保護してください。
