SSD Nodes Learn Hosting plans →
Guide Matt ConnorDi Matt Connor · Aggiornato 2026-08-29

Searx o SearXNG: quale installare oggi?

Searx non è più mantenuto: l’ultimo commit risale ad aprile 2023. Verifica lo stato del progetto e scopri cosa cambia per installare una nuova istanza SearXNG.

Searx o SearXNG: quale installare?

Searx e SearXNG sono due progetti diversi con nomi quasi identici, ma solo uno dei due riceve ancora correzioni. Installare SearXNG. Il progetto Searx originale non riceve commit dal codice da aprile 2023 e il relativo README chiarisce la situazione in una sola riga: "Searx non è più mantenuto."

Questo crea un problema pratico, non filosofico. I due progetti condividono uno screenshot, gran parte di un file di configurazione e metà del nome. Per questo, una guida scritta per uno dei due può sembrare applicabile anche all'altro. Non lo è. Il file delle impostazioni si trova in un'altra posizione, la protezione contro i bot è nuova e il nome del pacchetto non è più disponibile nelle versioni correnti di Ubuntu. Di seguito sono descritti i punti di divergenza, i comandi per verificare autonomamente lo stato e gli aspetti cambiati per chi deve mettere in esecuzione un'istanza.

Che cos'è Searx e da dove nasce SearXNG

Searx è un motore di metaricerca. Non mantiene un proprio indice. Riceve la query, la inoltra ad altri servizi di ricerca come Bing, DuckDuckGo o Wikipedia, quindi combina le risposte in un'unica pagina dei risultati. Il vantaggio è che questi servizi vedono l'indirizzo del server invece del tuo. Il costo è la manutenzione. Ogni motore è un piccolo componente di codice che analizza l'HTML o l'API di qualcun altro, quindi smette di funzionare ogni volta che il servizio upstream cambia. Un motore di metaricerca è affidabile solo quanto le persone che correggono i relativi moduli.

Il repository searx è stato creato nell'ottobre 2013. Nell'aprile 2021 un ex maintainer ha avviato SearXNG come fork del progetto. La sigla "NG" significa next generation. Il README di searx descrive i due progetti affiancati e questa descrizione resta il riepilogo più chiaro della separazione:

SearxNG è un fork di searx, creato da un ex maintainer di searx.
SearxNG utilizza rolling release, aggiorna le dipendenze più frequentemente e corregge più rapidamente i motori.

Il disaccordo alla base del fork riguardava la diagnostica. Searx considerava i dati sull'utilizzo come informazioni che un'istanza non dovrebbe conservare, e le impostazioni predefinite lo dichiarano esplicitamente: enable_stats: False # activate /stats page - note: it may leak usage data. SearXNG ha fatto la scelta opposta e include enable_metrics: true nelle impostazioni predefinite. Queste metriche alimentano le barre dei tempi di risposta e le pagine degli errori, che rendono semplice individuare e correggere un motore non funzionante. Entrambe le posizioni sono difendibili. Solo una delle due ha continuato a rilasciare codice.

Searx è morto? Come verificarlo personalmente

"Mortale" non è uno stato riportato da GitHub, quindi leggete i due segnali disponibili e traete le vostre conclusioni. Il primo indica se il repository è archiviato e quando ha ricevuto l'ultimo push.

curl -s https://api.github.com/repos/searx/searx | jq -r '.archived, .pushed_at'
curl -s https://api.github.com/repos/searxng/searxng | jq -r '.archived, .pushed_at'

Il 22 agosto 2026 il primo comando stampa false e 2026-05-14T10:02:22Z. Il secondo stampa false e un timestamp relativo al giorno in cui lo eseguite. Prendete nota del primo valore. Il repository searx non è archiviato e nessuno ha chiuso l'accesso, motivo per cui la domanda continua a ripresentarsi.

pushed_at è un segnale debole se considerato da solo, perché cambia anche dopo un push su un ramo qualsiasi, inclusa una modifica di una sola riga nella documentazione. Consultate invece l'elenco dei commit.

curl -s 'https://api.github.com/repos/searx/searx/commits?per_page=5' \
  | jq -r '.[] | .commit.committer.date[:10] + "  " + (.commit.message | split("\n")[0])'

Ad agosto 2026 il comando stampa:

2026-05-14  [doc] add hister reference
2023-09-07  Searx is no longer maintained
2023-04-05  Fix quoting issue in search_operator plugin (#3479)
2023-04-04  Bump pallets-sphinx-themes from 2.0.2 to 2.0.3 (#3450)
2023-04-04  Bump selenium from 4.7.2 to 4.8.3 (#3490)

Leggetelo dal basso verso l'alto. Lo sviluppo ordinario si interrompe ad aprile 2023. Il commit di settembre 2023 corrisponde all'inserimento dell'avviso nel README da parte dei manutentori. L'unico commit successivo riguarda la documentazione, perché l'autore originale è passato a Hister, uno strumento di ricerca che indicizza le pagine e i file scelti dall'utente invece di interrogare altri motori. È un'idea diversa e utile se ciò che vi serve è un motore di ricerca personale per i vostri contenuti.

Il secondo segnale riguarda il packaging, da cui dipendono implicitamente molte guide obsolete.

  • PyPI contiene una sola release searx, la versione 0.17.0, caricata a luglio 2020. pip install searx va a buon fine e fornisce codice risalente a nove mesi prima dell'esistenza del fork.
  • Debian ha distribuito searx 1.1.0 in Debian 12 (bookworm) e lo include ancora in unstable. Il pacchetto è stato rimosso da testing a ottobre 2023, quindi Debian 13 (trixie) non include alcun pacchetto searx.
  • Ubuntu lo ha distribuito l'ultima volta nella versione 22.04, alla versione 1.0.0. Su Ubuntu 24.04, sudo apt install searx termina con E: Unable to locate package searx.
  • searx.space, la directory delle istanze pubbliche a cui il progetto ha sempre indirizzato gli utenti, ora elenca istanze SearXNG.

Questa è quindi la situazione reale. Il codice è pubblico, continua a funzionare e potete clonarlo e avviarlo oggi stesso. Non riceverete però correzioni per i motori né aggiornamenti di sicurezza, che per un motore di metaricerca costituiscono l'intero scopo del progetto. I motori diventano obsoleti secondo tempistiche stabilite da altri. Un'istanza non mantenuta restituisce ogni mese meno risultati, senza che nessuno debba intervenire sul server.

Cosa è cambiato nel fork per una nuova istanza

Il file delle impostazioni è stato spostato e ora viene usato come overlay

In Searx modificavi searx/settings.yml all'interno dell'albero dei sorgenti. In SearXNG il file si trova in /etc/searxng/settings.yml e il processo lo individua tramite la variabile d'ambiente SEARXNG_SETTINGS_PATH. Il modello che l'installer copia in quella posizione è breve:

use_default_settings: true

general:
  debug: false
  instance_name: "SearXNG"

search:
  safe_search: 2
  autocomplete: 'duckduckgo'
  formats:
    - html

server:
  # Is overwritten by ${SEARXNG_SECRET}
  secret_key: "ultrasecretkey"
  limiter: true
  image_proxy: true

valkey:
  # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}.
  url: valkey://localhost:6379/0

use_default_settings: true è la riga che cambia il modo di lavorare. Con questa impostazione, il file contiene solo gli override; tutte le chiavi omesse vengono prese dai valori predefiniti inclusi nel pacchetto. Senza questa impostazione, il file deve descrivere l'intera configurazione, motore per motore. È così che si finisce con un'istanza che si avvia correttamente ma non trova nulla. Un vecchio file delle impostazioni di Searx incollato in questo percorso è una configurazione completa con nomi di chiavi diversi, quindi segue il secondo percorso e lo segue nel modo sbagliato.

La chiave segreta arresta il processo

sudo -H sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" \
              "/etc/searxng/settings.yml"

Esegui questo comando una volta, dopo aver copiato il modello. Se lo ometti, SearXNG registra una riga ed esce con stato 1, perché webapp.py confronta la chiave con il valore del modello prima di offrire qualsiasi servizio:

server.secret_key is not changed. Please use something else instead of ultrasecretkey.

Il controllo viene saltato quando general.debug è true, quindi un'istanza può funzionare correttamente in una sessione di debug e poi rifiutarsi di avviarsi sotto systemd o in un container. Se un container si riavvia in un ciclo e quella riga è presente in docker compose logs, è questo controllo a essere attivato, non un'immagine danneggiata.

Il limiter è nuovo e richiede Valkey

Searx non aveva un rate limiting interno all'applicazione. Le istanze Searx pubbliche utilizzavano servizi separati davanti all'applicazione: filtron per il filtraggio delle richieste e morty per il proxying dei contenuti dei risultati. Entrambi questi repository hanno ricevuto l'ultimo commit nel 2023.

SearXNG gestisce direttamente queste funzioni. Il rate limiting e il rilevamento dei bot sono gestiti dal limiter, attivato con server.limiter. Nei valori predefiniti distribuiti è false e nel modello dell'installer è true; inoltre richiede un database Valkey per memorizzare i contatori. Valkey è un fork di Redis e Ubuntu 24.04 lo include nei pacchetti:

sudo apt install -y valkey-server
server:
  limiter: true

valkey:
  url: valkey://localhost:6379/0

Le guide scritte prima di questo cambio di nome configurano invece un blocco redis:, quindi copia il nome della chiave dalla documentazione aggiornata del limiter. La regolazione dettagliata si trova in un secondo file, /etc/searxng/limiter.toml, e server.public_instance: true attiva il rilevamento più rigoroso dei bot richiesto da un'istanza pubblica, incluso il metodo del link token. Il risultato visibile è che alcune richieste ricevono HTTP 429 invece dei risultati, comprese le richieste effettuate da te se usi script sull'istanza. Questo comportamento ha una pagina dedicata qui: perché un'istanza SearXNG risponde con 429 Too Many Requests.

I motori si sospendono autonomamente e i timeout sono lunghi

Quando un servizio upstream risponde con un CAPTCHA o una pagina di rate limit, SearXNG solleva un'eccezione tipizzata e smette di interrogare quel motore per un determinato periodo, invece di ritentare fino al blocco. I valori predefiniti sono inclusi in searx/settings.yml sotto search.suspended_times. Questi sono i valori pubblicati in 6 ad agosto 2026:

ChartSearXNG default engine suspension times, in seconds
The data behind this chart
[
  {
    "label": "SearxEngineAccessDenied",
    "suspend_seconds": "180"
  },
  {
    "label": "SearxEngineCaptcha",
    "suspend_seconds": "3,600"
  },
  {
    "label": "SearxEngineTooManyRequests",
    "suspend_seconds": "180"
  },
  {
    "label": "cf_SearxEngineCaptcha",
    "suspend_seconds": "1,296,000"
  },
  {
    "label": "cf_SearxEngineAccessDenied",
    "suspend_seconds": "86,400"
  },
  {
    "label": "recaptcha_SearxEngineCaptcha",
    "suspend_seconds": "604,800"
  }
]

Una normale risposta di accesso negato sospende il motore per 180 secondi. Un CAPTCHA lo sospende per 3,600 secondi. Un CAPTCHA Cloudflare lo sospende per 1,296,000 secondi, cioè quindici giorni, mentre un Google reCAPTCHA lo sospende per 604,800 secondi, cioè una settimana. I valori lunghi sono intenzionali: ritentare dopo che un servizio ha già segnalato l'indirizzo è il modo in cui l'IP di un'istanza viene bloccato definitivamente.

Mentre un motore è sospeso, la pagina dei risultati lo esclude e lo segnala nel blocco laterale intitolato "Messaggi dai motori di ricerca"; inoltre /stats/errors elenca gli elementi che hanno avuto esito negativo. Un'istanza appena configurata che restituisce pochi risultati di solito mostra questo comportamento, non un'installazione danneggiata.

L'API JSON è disattivata per impostazione predefinita

Il valore predefinito distribuito è formats: [html] e non contiene altro, quindi l'API richiesta da ogni script resta chiusa finché non la abiliti.

curl -s -o /dev/null -w '%{http_code}\n' \
  'http://127.0.0.1:8888/search?q=test&format=json'

Il comando stampa 403, perché la route di ricerca chiama flask.abort(403) quando il formato richiesto non è elencato in search.formats. Aggiungi il formato e riavvia il servizio:

search:
  formats:
    - html
    - json

Il file delle impostazioni di searx non contiene alcuna chiave formats, quindi l'output JSON era semplicemente disponibile senza configurazione aggiuntiva. Ogni script e snippet di quell'epoca presuppone lo stesso comportamento, e il risultato dell'errore è un 403 senza spiegazioni. Se stai integrando un'istanza con altri strumenti, fornire a un agente un endpoint SearXNG con cui eseguire ricerche inizia da questa impostazione.

Perché i tutorial Searx copiati e incollati non funzionano

Ognuna di queste righe compare ancora in guide ben posizionate nei risultati di ricerca, ma su un'installazione attuale non funziona o induce in errore.

  • sudo apt install searx su Ubuntu 24.04 si interrompe su E: Unable to locate package searx, perché il pacchetto è stato rilasciato l'ultima volta per la versione 22.04.
  • pip install searx termina correttamente e installa la versione 0.17.0, pubblicata a luglio 2020. Nessun messaggio indica che è precedente al fork.
  • git clone https://github.com/asciimoo/searx funziona ancora, perché GitHub reindirizza il vecchio nome del proprietario e fornisce l'albero del codice di aprile 2023.
  • Le procedure che modificano searx/settings.yml nell'albero dei sorgenti non producono alcun effetto su SearXNG, che legge /etc/searxng/settings.yml.
  • Le procedure che installano filtron o morty ricompilano componenti già inclusi in SearXNG.
  • Un URL redis: per il limiter usa un nome precedente di una rinomina rispetto alla chiave valkey: attuale.

Anche le guide per SearXNG diventano obsolete. L'URL di clonazione è il modo più rapido per capire quanto è datata una guida. I file Compose si trovavano in precedenza in un repository searxng-docker separato. Questo repository è stato archiviato a marzo 2026 e i relativi file sono stati spostati in container/ nel repository principale. L'avvio rapido del container attualmente riportato nella documentazione è:

mkdir -p ./searxng/core-config/
cd ./searxng/
curl -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
nano .env
docker compose up -d

Modifica .env prima di eseguire l'ultimo comando. L'immagine associa le variabili d'ambiente alle chiavi delle impostazioni: SEARXNG_SECRET diventa server.secret_key e SEARXNG_BASE_URL diventa server.base_url. L'installazione dello script sull'host segue un percorso diverso, ma produce lo stesso risultato:

git clone https://github.com/searxng/searxng.git searxng
cd searxng
sudo -H ./utils/searxng.sh install all

Questa procedura crea l'utente searxng, l'ambiente virtuale in /usr/local/searxng e il servizio uWSGI, che rappresenta la configurazione di riferimento nella documentazione di SearXNG. La procedura dettagliata per questo percorso è installare SearXNG sul proprio VPS.

Istanza pubblica o istanza propria

Un'istanza pubblica è un server gestito da terzi che termina la connessione TLS (transport layer security), quindi il software installato su quel server legge la query in chiaro. La documentazione ufficiale di SearXNG espone chiaramente il problema della fiducia: è necessario fidarsi dell'amministratore e non è possibile sapere se le richieste vengono registrate, aggregate o inoltrate a terzi. L'elenco degli elementi visibili è breve e completo. Lo stack dell'operatore può vedere il testo della query, l'ora, l'indirizzo IP da cui arriva la richiesta, lo user agent del browser e il cookie delle preferenze che contiene le impostazioni. L'operatore controlla anche il codice, quindi qualsiasi patch applicata viene eseguita per ogni ricerca effettuata su quell'istanza.

Un'impostazione predefinita facilita la registrazione accidentale. Searx inviava le ricerche con POST. SearXNG include method: "GET", accompagnato dal commento secondo cui POST mantiene le query di ricerca fuori dalla cronologia del browser, ma causa problemi di usabilità. Con GET, la query si trova nella riga della richiesta, quindi viene inserita per impostazione predefinita nel log degli accessi del reverse proxy e nella cronologia del browser. È il normale comportamento di un web server. È utile saperlo prima di scegliere su quale server eseguire le ricerche.

Eseguire una propria istanza sposta la fiducia, invece di eliminarla. Controlli il codice e i log e, se preferisci non pubblicare affatto un hostname o un certificato TLS per un singolo computer, raggiungerla tramite un servizio onion v3 mantiene l'istanza fuori dal DNS pubblico, pur consentendoti di accedervi da qualsiasi posizione. In cambio, i motori upstream vedono un unico indirizzo per tutte le tue ricerche e, in un'istanza per singolo utente, ogni query è riconducibile a te invece di confondersi con quelle di una collettività. Un'istanza pubblica utilizzata da molte persone offre questa collettività e ti sottrae il controllo dei log. Scegli la caratteristica che ritieni più importante e, se vuoi prima esaminare l'elenco completo dei rischi, verifica se SearXNG è sicuro da usare.

Una nota pratica per un VPS. Gli intervalli di indirizzi dei datacenter vengono segnalati più rapidamente rispetto alle connessioni domestiche, quindi una nuova istanza può incontrare CAPTCHA su alcuni motori già nelle prime ricerche. È il comportamento di sospensione descritto sopra che sta svolgendo il suo compito, non un'errata configurazione.

Se esegui già un'istanza Searx

Il giorno in cui leggi questa guida non si verifica alcun problema. Il server continua a funzionare fino a quando una modifica upstream non causa il malfunzionamento di un altro engine; da quel momento il problema rimane. Pianifica la migrazione e non trasferire il file di configurazione. Parti dal template SearXNG, quindi aggiungi nuovamente solo ciò che hai modificato intenzionalmente: il nome dell'istanza, safe_search, gli engine che hai abilitato o disabilitato, indicandoli per nome, e le impostazioni predefinite dell'interfaccia. Nel fork sono cambiati i nomi e le opzioni degli engine. Verifica quindi ciascun elemento nella documentazione corrente invece di presumere che la chiave esista ancora. Le regole Filtron e un URL morty non hanno equivalenti, perché queste funzioni sono state integrate nell'applicazione.

Esegui la nuova istanza su una porta diversa mentre quella precedente è ancora attiva. La configurazione è corretta quando la pagina iniziale restituisce 200, una ricerca produce risultati da più di un engine e /stats/errors è vuoto oppure elenca solo errori che sai interpretare. Quindi sposta il reverse proxy sulla nuova istanza e arresta il servizio precedente.

FAQ

Searx è morto nel 2026?

Il repository non è archiviato, quindi nulla impedisce di clonarlo, ma il progetto non è mantenuto. L’ultimo commit al codice risale ad aprile 2023 e il README contiene la frase "Searx is no longer maintained." Verificalo con curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at', quindi leggi i messaggi dei commit recenti, perché una data di push può dipendere soltanto da una modifica alla documentazione. Per un motore di metaricerca, un progetto non mantenuto produce risultati sempre meno affidabili, perché ogni modulo dipende da un sito upstream che continua a cambiare.

Posso ancora installare Searx con apt o pip?

Non sui sistemi attuali e, dove è ancora possibile, non in modo utile. Ubuntu ha incluso l’ultimo pacchetto di searx nella versione 22.04, alla versione 1.0.0, quindi sudo apt install searx su 24.04 restituisce E: Unable to locate package searx. Debian ha distribuito la versione 1.1.0 in Debian 12 e l’ha rimossa da testing nell’ottobre 2023, quindi Debian 13 non include alcun pacchetto. PyPI distribuisce ancora la versione 0.17.0 di luglio 2020, più vecchia del fork stesso. Installa invece SearXNG.

Il mio vecchio file settings.yml di searx funzionerà in SearXNG?

No. Copia i valori, non il file. SearXNG legge /etc/searxng/settings.yml e richiede use_default_settings: true all’inizio del file, quindi il tuo file viene applicato come overlay ai valori predefiniti distribuiti. Un vecchio file di searx è una configurazione completa con nomi delle chiavi diversi e non contiene limiter, né un blocco valkey né un elenco formats. Parti dal modello disponibile in utils/templates/etc/searxng/settings.yml e riaggiungi le modifiche una alla volta.

Perché la mia istanza SearXNG restituisce meno risultati di un’istanza pubblica?

Alcuni motori sono sospesi. Quando un motore risponde con un CAPTCHA o con una pagina di limitazione della frequenza, SearXNG interrompe le richieste verso quel motore per un intervallo fisso: da 180 secondi per un rifiuto semplice fino a 1,296,000 secondi per un CAPTCHA Cloudflare. La pagina dei risultati segnala il problema nella sezione "Messages from the search engines" e /stats/errors elenca gli errori con le relative cause. Gli indirizzi dei data center vengono contrassegnati prima rispetto alle connessioni domestiche, quindi il problema compare rapidamente su una nuova istanza VPS.

Devo usare un’istanza SearXNG pubblica o eseguirne una mia?

Esegui una tua istanza se vuoi controllare il codice e i log e accetti che i motori upstream vedano un unico indirizzo per tutte le tue ricerche. Usa un’istanza pubblica se per te è più importante mescolare le tue query con quelle di altre persone che sapere quali dati vengono registrati. Su un’istanza pubblica, il gestore può vedere il testo della query, l’ora, il tuo indirizzo IP e il tuo user agent e può modificare il codice in qualsiasi momento. Una policy di logging dichiarata non può essere verificata dall’esterno.