SearXNG: A Practical Guide to the Privacy-First Meta Search Engine
Tired of search engines tracking your every query, serving personalized ads, and trapping you in an information bubble? SearXNG takes your search results from 70+ engines โ without ever logging who you are or what you searched for.
1. What Is SearXNG?
SearXNG is a free, open-source internet meta search engine that aggregates results from over 70 search services. Its core value proposition is built on four pillars: privacy protection, no user tracking, self-hostable, and fully open-source.
Problems it solves:
- Google and Bing collect user data for targeted advertising
- Personalized search results create information bubbles
- Ad interference degrades the search experience
- Inability to customize or combine search sources
Ideal use cases:
- Privacy-conscious individual users
- Enterprise intranet search
- Academic and scientific research
- Developer search aggregation
2. Technical Architecture
Tech Stack:
- Backend: Python 3.8+ / Flask
- Frontend: HTML + CSS + JavaScript
- Database: Redis (optional, for caching)
- Template Engine: Jinja2
- Deployment: Docker / uWSGI / Nginx
Architecture highlights:
1. Stateless design for easy horizontal scaling
2. Plugin-based search engine adapters
3. Support for multiple result formats
4. Highly customizable
Core Components:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SearXNG Instance โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๆฅ่ฏขๅค็ โ ๅผๆ่ฐๅบฆ โ ็ปๆๅๅนถ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Google โ Bing โ DuckDuckGo โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๆๅ็ฎๆณ โ ่ฟๆปค โ ็ผๅญ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3. Core Features
3.1 Multi-Engine Aggregation
Supported Search Engines
# General search (30+)
- Google, Bing, DuckDuckGo
- Yahoo, Yandex, Brave
- Mojeek, Searx
Image search (15+)
- Google Images, Bing Images
- Flickr, Unsplash, Pixabay
Video search (10+)
- YouTube, PeerTube, Dailymotion
- Google Videos, Bing Videos
News search (10+)
- Google News, Bing News
- Yahoo News, Wikinews
Academic search (10+)
- Google Scholar, arXiv
- PubMed, Semantic Scholar
File search (5+)
- Google Files, Piratebay
- 1337x, Nyaa
Engine Configuration
# settings.yml
engines:
- name: google
engine: google
shortcut: g
disabled: false
- name: bing
engine: bing
shortcut: b
disabled: false
- name: duckduckgo
engine: duckduckgo
shortcut: ddg
disabled: false
3.2 Privacy Protection
Privacy Features
# No logging
- User IP addresses
- Search history
- User agents
- Cookies (can be disabled)
No tracking
- No third-party scripts
- No analytics tools
- No ad tracking
Encryption
- HTTPS enforcement
- Result link rewriting
- Proxy images (optional)
Privacy Settings
# settings.yml
server:
secret_key: "your-secret-key"
limiter: false # Disable rate limiting (recommended for public instances)
search:
safe_search: 0 # 0=off, 1=moderate, 2=strict
autocomplete: "google"
default_lang: "zh-CN"
3.3 Custom Search
Search Categories
# Categories
- general: General search
- images: Images
- videos: Videos
- news: News
- science: Science
- files: Files
- it: Information Technology
- location: Location
- music: Music
- social media: Social Media
Search Syntax
# Category search
!images cats
!videos tutorials
!news technology
Engine-specific search
!g search term # Google
!b search term # Bing
!ddg search term # DuckDuckGo
Language
:zh search term # Chinese
:en search term # English
Time range
:date search term # Past day
:week search term # Past week
:month search term # Past month
:year search term # Past year
4. Deployment Guide
Option 1: Docker Deployment (Recommended)
1. Quick Start
# Pull the image
docker pull searxng/searxng:latest
Create configuration directory
mkdir -p /opt/searxng/{etc,cache}
cd /opt/searxng
Run the container
docker run -d \
--name searxng \
--restart=always \
-p 8080:8080 \
-v ./etc:/etc/searxng \
-v ./cache:/var/cache/searxng \
-e SEARXNG_BASE_URL=http://localhost:8080/ \
searxng/searxng:latest
Access
http://localhost:8080
2. Docker Compose (Production)
# docker-compose.yml
version: "3.8"
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
restart: always
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=https://search.yourdomain.com/
- SEARXNG_SECRET=your-secret-key
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
# Optional: Redis cache
redis:
image: redis:alpine
container_name: searxng-redis
restart: always
command: redis-server --save 30 1 --loglevel warning
volumes:
- redis-data:/data
# Optional: Caddy reverse proxy
caddy:
image: caddy:2-alpine
container_name: searxng-caddy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
depends_on:
- searxng
volumes:
redis-data:
caddy-data:
caddy-config:
3. Configuration
# Generate secret key
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
Edit configuration
vim searxng/settings.yml
Key configuration
server:
secret_key: "your-secret-key"
bind_address: "0.0.0.0"
port: 8080
base_url: "https://search.yourdomain.com/"
search:
safe_search: 0
autocomplete: "google"
default_lang: "zh-CN"
ui:
static_use_hash: true
default_theme: simple
redis:
url: redis://redis:6379/0
4. Start Services
# Start
docker-compose up -d
View logs
docker-compose logs -f searxng
Test
curl http://localhost:8080
Option 2: Direct Installation
1. Install Dependencies
# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-pip python3-venv git redis-server
Create virtual environment
python3 -m venv /opt/searxng/venv
source /opt/searxng/venv/bin/activate
Clone the repository
git clone https://github.com/searxng/searxng.git /opt/searxng/source
cd /opt/searxng/source
Install dependencies
pip install -U pip setuptools wheel pyyaml
pip install -e .
2. Configuration
# Create config directory
sudo mkdir -p /etc/searxng
Copy configuration
sudo cp searxng/settings.yml /etc/searxng/
sudo cp searxng/limiter.toml /etc/searxng/
Edit configuration
sudo vim /etc/searxng/settings.yml
Update secret key
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" /etc/searxng/settings.yml
3. Systemd Service
# Create service file
sudo vim /etc/systemd/system/searxng.service
[Unit]
Description=SearXNG Service
After=network.target redis.service
[Service]
Type=simple
User=searxng
Group=searxng
WorkingDirectory=/opt/searxng/source
Environment="SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml"
ExecStart=/opt/searxng/venv/bin/python -m searx.webapp
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Create user
sudo useradd -r -s /bin/false -d /opt/searxng searxng
sudo chown -R searxng:searxng /opt/searxng /etc/searxng
Enable service
sudo systemctl daemon-reload
sudo systemctl enable searxng
sudo systemctl start searxng
Option 3: Kubernetes Deployment
# kubernetes/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: searxng
spec:
replicas: 3
selector:
matchLabels:
app: searxng
template:
metadata:
labels:
app: searxng
spec:
containers:
- name: searxng
image: searxng/searxng:latest
ports:
- containerPort: 8080
env:
- name: SEARXNG_BASE_URL
value: "https://search.yourdomain.com"
- name: SEARXNG_SECRET
valueFrom:
secretKeyRef:
name: searxng-secrets
key: secret-key
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
volumeMounts:
- name: config
mountPath: /etc/searxng
volumes:
- name: config
configMap:
name: searxng-config
apiVersion: v1
kind: Service
metadata:
name: searxng
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
selector:
app: searxng
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: searxng
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- search.yourdomain.com
secretName: searxng-tls
rules:
- host: search.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: searxng
port:
number: 80
5. Comparison with Alternatives
| Feature | SearXNG | Google | DuckDuckGo | Brave Search | Whoogle |
|---------|---------|--------|------------|-------------|---------|
| Open Source | Yes | No | No | No | Yes |
| Self-Hosted | Yes | No | No | No | Yes |
| No User Tracking | Yes | No | Partial | Partial | Yes |
| Meta Search (Aggregation) | Yes (70+ engines) | No | Partial | No | Google only |
| Customizable Engines | Yes | No | No | No | No |
| API Access | Yes (JSON/RSS/CSV) | Limited | No | No | No |
| Ad-Free Results | Yes | No | Partial | Partial | Yes |
| Search Categories | 10+ categories | Limited | Limited | Limited | Limited |
| Encryption | HTTPS + link rewriting | HTTPS | HTTPS | HTTPS | HTTPS |
6. Common Issues & Troubleshooting
Issue 1: Search Engines Getting Blocked
# Solutions
1. Use proxies
# settings.yml
outGoing:
proxies:
all://:
- http://proxy1:8080
- http://proxy2:8080
2. Switch engines
Disable blocked engines
Enable alternative engines
3. Reduce request frequency
# settings.yml
outgoing:
request_timeout: 10
max_request_timeout: 30
Issue 2: Poor Result Quality
# Optimization
1. Adjust engine weights
weight: 1.5 # Increase trusted engine weight
2. Disable low-quality engines
disabled: true
3. Enable filtering
search:
safe_search: 2 # Strict mode
Issue 3: Slow Response Times
# Optimization
1. Enable caching
redis:
url: redis://localhost:6379/0
2. Use a CDN
# Cloudflare
Configure cache rules
Cache static assets
3. Optimize server
- Increase RAM
- Use SSD storage
- Optimize network
Issue 4: Rate Limiting on Public Instances
# Solutions
1. Enable the built-in limiter
# settings.yml
server:
limiter: true
2. Configure bot detection
# limiter.toml
[botdetection.ip_limit]
link_token = true
[botdetection.ip_limit.filter_request]
limit = 100 # Max 100 requests per minute
burst = 20 # Allow burst of 20
3. Use Nginx rate limiting as an additional layer
Issue 5: Docker Container Keeps Restarting
# Solutions
1. Check logs for errors
docker logs searxng
2. Verify settings.yml syntax
docker exec -it searxng python -c "import yaml; yaml.safe_load(open('/etc/searxng/settings.yml'))"
3. Ensure proper file permissions
sudo chown -R 1000:1000 ./searxng
4. Check for port conflicts
sudo netstat -tlnp | grep 8080
7. FAQ
Q1: Is SearXNG completely anonymous?
SearXNG itself does not log or track any user data. However, the search engines it queries (Google, Bing, etc.) will see the IP address of your SearXNG server. For full anonymity, consider running SearXNG behind a VPN or Tor, and enable the built-in proxy for result links.
Q2: Can I use SearXNG as my default browser search engine?
Yes. SearXNG provides an OpenSearch description file that most modern browsers can detect automatically. Simply visit your SearXNG instance and add it as a search engine in your browser settings.
Q3: How much resources does SearXNG need?
A basic SearXNG instance runs comfortably on 1 CPU core and 512MB RAM. For production with Redis caching and higher traffic, 2 cores and 1GB RAM is recommended. Disk usage is minimal (under 1GB).
Q4: Can I customize the appearance of SearXNG?
Yes. SearXNG supports custom themes. You can clone the default theme, modify the CSS, and set it as the default in settings.yml. Several pre-built themes are also available.
Q5: Does SearXNG support API access?
Yes. SearXNG provides JSON, RSS, and CSV API endpoints. Simply append &format=json, &format=rss, or &format=csv to your search URL. This is excellent for integrating search into other applications.
Q6: How do I keep my SearXNG instance up to date?
For Docker deployments, pull the latest image and recreate the container: docker-compose pull && docker-compose up -d. For direct installations, git pull and reinstall dependencies. Always backup your settings.yml before updating.
8. Who Should Use This?
SearXNG is ideal for:
- Privacy-conscious users who want to escape surveillance capitalism
- Organizations needing internal search without data leakage
- Academic researchers requiring unbiased, unfiltered results
- Developers building search-powered applications via API
- Teams that want to aggregate multiple search sources in one place
- Anyone frustrated by personalized search bubbles
SearXNG may not be ideal for:
- Users who need Google's highly personalized results
- Those dependent on a single specific search engine's features
- People who don't care about privacy (though they should)
- Users wanting a zero-setup solution (public instances exist, but self-hosting requires some effort)
Verdict
SearXNG is a powerful, privacy-friendly, and remarkably flexible meta search engine. It solves the fundamental privacy problems of mainstream search engines while offering richer search capabilities through aggregation. Whether you self-host it for personal use or deploy it at scale for an organization, SearXNG proves that search can be both comprehensive and respectful of user privacy.
For anyone who values their digital privacy โ or simply wants cleaner, ad-free search results from dozens of engines at once โ SearXNG is an essential tool that will change how you think about search.
GitHub Repository: https://github.com/searxng/searxng
Comments (0)
No comments yet. Be the first to comment!