Validatore Configurazione Nginx
Incolla un nginx.conf per individuare errori di sintassi, direttive fuori posto ed errori di sicurezza comuni — prima di ricaricare nginx.
Trascina qui un file .conf, oppure incolla il testo di configurazione sopra.
Tutto viene eseguito nel tuo browser — la tua configurazione non viene mai caricata su alcun server.
Incolla una configurazione nginx qui sopra (o carica l'esempio) e i controlli compariranno qui.
Usa il motore di espressioni regolari di JavaScript, non il vero motore PCRE di nginx — molto simile, ma non identico (senza quantificatori possessivi/gruppi atomici).
Individuare gli errori di configurazione nginx prima che arrivino in produzione
Un nginx.conf difettoso di solito si manifesta in uno di due modi spiacevoli: `nginx -t` che rifiuta il reload con un criptico errore di numero di riga oppure, peggio, un `reload` che mantiene in memoria la vecchia configurazione funzionante mentre quella nuova, rotta, resta su disco, così sembra tutto a posto fino al successivo riavvio completo. Entrambe le situazioni si evitano intercettando prima lo stesso tipo di errori, mentre stai ancora modificando.
L'errore più comune nei veri nginx.conf non ha nulla di esotico: è un punto e virgola dimenticato. Poiché la grammatica di nginx dà peso solo a `;`, `{` e `}` (non agli a capo), un `;` mancante non produce un chiaro "riga 12: atteso ;" come in gran parte dei parser moderni; invece nome e argomenti della direttiva successiva vengono assorbiti in silenzio come argomenti extra della precedente, a volte senza alcun errore finché qualcosa a valle non si comporta in modo strano. L'euristica sugli a capo di questo strumento controlla proprio questo schema, cioè il nome di una direttiva nota che compare a metà dell'elenco di argomenti in una nuova riga del sorgente, e lo segnala prima che diventi un ticket di assistenza.
La posizione delle direttive è la seconda trappola frequente: `proxy_pass` ha senso solo dentro un blocco `location` (o `if`), `listen`/`server_name` solo dentro `server`, e così via, ma il parser di nginx non rifiuta una direttiva solo perché è in un posto insolito se il nome è comunque riconosciuto in senso più ampio, e i messaggi di errore fanno riferimento al registro interno delle direttive di nginx anziché dire "hai annidato male questa". Questo validatore controlla direttamente la tabella direttiva-contesto, così un `proxy_pass` lasciato per errore a livello `http` (fuori da qualsiasi `server`/`location`) viene segnalato con la riga esatta, non con un generico "la configurazione non si è caricata".
Oltre alla sintassi, alcune piccole scelte di configurazione hanno conseguenze di sicurezza sproporzionate: lasciare `server_tokens` al valore predefinito (`on`) mostra la tua versione esatta di nginx in ogni header di risposta e nella pagina di errore predefinita, una ricognizione gratuita per chi cerca una CVE specifica di quella versione; usare la variabile `$uri`, decodificata dall'URL, dentro un `return`/`rewrite`/`add_header` (invece del grezzo `$request_uri`) può in certe configurazioni permettere a un attaccante di iniettare caratteri in una destinazione di reindirizzamento. Nessuna delle due cose rompe qualcosa in modo visibile durante i test normali, ed è proprio per questo che meritano un controllo dedicato invece di affidarsi a individuarle a occhio in una configurazione di 200 righe.
Domande frequenti
Sostituisce `nginx -t`?
No. `nginx -t` è l'unico strumento che controlla la configurazione rispetto alla build di nginx e ai moduli effettivamente installati sul tuo server, ed è l'ultima parola prima di un reload. Questo validatore intercetta lo stesso tipo di errori (errori di sintassi, direttive nel posto sbagliato, qualche problema di sicurezza) ancora prima di arrivare a un server con nginx installato: utile mentre modifichi in locale, in un passaggio di CI o quando non hai ancora accesso shell alla macchina di destinazione.
L'elenco dei controlli di sicurezza è esaustivo?
No: copre un piccolo insieme di controlli scelti con cura (`server_tokens off;` mancante, `autoindex on;` e `$uri` usato dove `$request_uri` è più sicuro), ispirati in modo libero a Gixy, l'auditor open source di configurazioni nginx. Non sostituisce Gixy né un audit di sicurezza completo.
Perché il tester di regex si comporta in modo leggermente diverso dal vero nginx?
Il matching `location ~` e `location ~*` di nginx usa PCRE (tramite la libreria PCRE inclusa nel binario nginx). Questo strumento gira interamente nel browser, quindi usa invece il motore RegExp integrato di JavaScript: i due sono molto simili per i pattern comuni, ma le funzioni solo PCRE come i quantificatori possessivi o i gruppi atomici qui non si comportano allo stesso modo.
La mia configurazione esce mai dal browser?
No. Parsing, validazione e entrambi i simulatori girano in JavaScript puro in questa scheda. Nulla viene caricato, registrato o inviato altrove: puoi persino disconnetterti da internet dopo il caricamento della pagina e continua a funzionare.
Strumenti correlati
- Formattatore e validatore JSON
- Generatore di codice QR
- Decodificatore JWT
- Codificatore/Decodificatore Base64
- Tester di Espressioni Regolari
- Selettore di colore e generatore di palette
- Convertitore CSV ↔ JSON
- Convertitore da JSON a Excel
- Validatore YAML Kubernetes
- Formattatore e Validatore SQL
- Formattatore di codice
- Validatore di standard ISO