SearXNG is a free internet metasearch engine which aggregates results from more than 70 search services. This guide sets up a working instance that can be accessed using a domain over HTTPS. Features include:
- Self hosted
- No user tracking
- No user profiling
- About 70 supported search engines
- Easy integration with any search engine
- Cookies are not used by default
- Secure, encrypted connections (HTTPS/SSL)
Installation
Install the required packages.
apt install git nginx -y
Open http and https ports.
iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
netfilter-persistent save
ufw allow 80
ufw allow 443
Clone the SearXNG Repository.
git clone https://github.com/searxng/searxng searxng
cd searxng
Installing SearXNG, Filtron and Morty.
./utils/searx.sh install all
./utils/filtron.sh install all
./utils/morty.sh install all
Check that both filtron and morty are running.
systemctl status filtron
systemctl status morty
Configure Nginx
Delete the default site.
rm /etc/nginx/sites-enabled/default
Create a new file /etc/nginx/sites-available/searxng.conf and add the following:
server {
# Listens on http
listen 80;
listen [::]:80;
# Your server name
server_name searx.example.org;
# If you want to log user activity, comment these
access_log /dev/null;
error_log /dev/null;
# Searx reverse proxy
location / {
proxy_pass http://127.0.0.1:4004/;
proxy_set_header Host $host;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Script-Name /searx;
}
location /searx/static {
alias /usr/local/searx/searx-src/searx/static;
}
# Morty reverse proxy
location /morty {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
}
}
Now create a symbolic link to enable this site.
ln -s /etc/nginx/sites-available/searxng.conf /etc/nginx/sites-enabled/searxng.conf
Restart Nginx and SearXNG.
systemctl restart nginx
service uwsgi restart searx
Configure HTTPS with Certbot
Install certbot.
apt install python3-certbot-nginx
Install a Let's Encrypt SSL certificate to Nginx and optionally let it configure HTTPS for you. Detailed instructions and additional information.
certbot --nginx
SearXNG should now be available from your domain.
Configuration
You can change settings by editing /etc/searxng/settings.yml.