Ricerca nel sito web

Come risolvere gli errori comuni di Nginx


introduzione

Esistono diversi metodi che puoi utilizzare per risolvere gli errori di Nginx. Tieni presente che questi metodi di risoluzione dei problemi sono intesi come punto di partenza e spesso sono necessarie ulteriori indagini per diagnosticare la causa principale di un problema. Mentre segui questo tutorial, gli errori stessi forniranno informazioni chiave che ti porteranno a una soluzione.

Questo tutorial esaminerà i seguenti comandi comunemente usati per risolvere i problemi di Nginx nella maggior parte delle distribuzioni Linux:

  • sudo cat /var/log/nginx/error.log: viene utilizzato per stampare un registro con un elenco di errori e dettagli su di essi.
  • sudo nginx -t: viene utilizzato per verificare la presenza di errori di sintassi nel file di configurazione.
  • systemctl status nginx: viene utilizzato per verificare se il tuo servizio Nginx è attivo o inattivo.

Imparerai di più su questi comandi e su come usarli per la risoluzione dei problemi di vari errori Nginx.

Risoluzione dei problemi con il registro degli errori

Quando ricevi un errore da Nginx, non è sempre chiaro quale potrebbe essere il problema. Per questo motivo, un errore potrebbe essere collegato a un problema più ampio oa un problema completamente separato. Dipende dalla tua situazione specifica, la configurazione può variare. Per ottenere una panoramica completa degli errori Nginx che si verificano, eseguire il seguente comando per ricevere un elenco in esecuzione:

  1. sudo cat /var/log/nginx/error.log

È necessario eseguire questo comando come utente privilegiato. Ti consigliamo di utilizzare un utente abilitato a sudo piuttosto che l'utente root. Il comando cat sta per concatenate, che è usato per leggere il contenuto di un file e stamparlo nell'output del tuo terminale. In questo caso, cat sta leggendo e stampando il contenuto del file /var/log/nginx/error.log. Quando esegui questo comando, il tuo output restituirà un elenco di errori. Tieni presente che se non ci sono errori, il tuo prompt rimarrà vuoto. Ecco un esempio di log degli errori:

2022/11/28 23:58:22 [emerg] 168641#168641: invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
2022/11/28 23:59:44 [emerg] 168664#168664: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/test.do-community.com:4
2022/11/29 00:00:19 [emerg] 168701#168701: "server" directive is not allowed here in /etc/nginx/sites-enabled/test.do-community.com:6

Questo output del log degli errori fornisce informazioni chiave sull'errore specifico riscontrato. La prima parte di questo elemento del registro riporta in dettaglio la data e l'ora in cui si è verificato l'errore e il tipo di messaggio di errore. In questo caso, questo è il tipo di messaggio [emerg] o di emergenza. Il componente finale di un elemento di log è costituito dal messaggio di errore stesso e, ove applicabile, dal file e dalla riga specifica in cui è possibile trovarlo.

Nel complesso, consultare il log degli errori di Nginx è utile se desideri più contesto sugli errori che potresti ricevere.

Controllo degli errori di sintassi

Uno degli errori più comuni con Nginx ha a che fare con la sintassi nel file di configurazione. Che si tratti di caratteri mancanti o di una struttura di sintassi errata, se la sintassi non è corretta, non funzionerà. Questo perché il file di configurazione è composto da varie direttive e deve essere dichiarato correttamente, altrimenti non saranno valide. Per verificare se sono presenti errori di sintassi, eseguire il seguente comando:

  1. sudo nginx -t

Questo comando dovrebbe essere eseguito da un utente privilegiato, consigliamo un utente abilitato a sudo anziché l'utente root. Inoltre, il flag t indica che questo testerà il file prima di eseguirlo effettivamente. Se la tua sintassi è corretta, riceverai il seguente output:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

In caso contrario, riceverai un messaggio di errore simile agli esempi che condividiamo sul registro degli errori. Ecco cosa potrebbe restituire il tuo output se c'è un errore di sintassi:

[emerg] invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
nginx: configuration file /etc/nginx/nginx.conf test failed

Ti consigliamo di eseguire sempre questo comando di sintassi per verificare che non vi siano elementi mancanti o non validi nel file di configurazione. Inoltre, dovresti sempre eseguire sudo systemctl reload nginx dopo aver apportato modifiche alla configurazione. Questo riavvierà Nginx e applicherà tutte le modifiche apportate.

Risoluzione dei problemi con systemctl status nginx

Un'altra opzione per la risoluzione degli errori di Nginx è verificare che questo servizio sia attivo e funzionante sul tuo sistema. È possibile che l'installazione sia incompleta o forse il servizio non è stato attivato. Puoi verificare se il tuo servizio Nginx è attivo o meno con il seguente controllo dello stato tramite il sistema di init systemd:

  1. systemctl status nginx

Se il tuo servizio è in esecuzione, verrà letto come attivo (in esecuzione nel tuo output:

 nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
     Active: active (running) since Tue 2022-11-29 16:37:49 UTC; 29s ago
       Docs: man:nginx(8)
    Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
    Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
   Main PID: 2787 (nginx)
      Tasks: 2 (limit: 1116)
     Memory: 3.3M
        CPU: 32ms
     CGroup: /system.slice/nginx.service
             ├─2787 "nginx: master process /usr/sbin/nginx -g daemon on; master>
             └─2790 "nginx: worker process"

Se il tuo servizio non è in esecuzione, verrà letto come inactive (dead) nell'output:

○ nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
     Active: inactive (dead) since Tue 2022-11-29 16:42:27 UTC; 1s ago
   Duration: 4min 38.006s
       Docs: man:nginx(8)
    Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
    Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
    Process: 2915 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/>
   Main PID: 2787 (code=exited, status=0/SUCCESS)
        CPU: 39ms

Se ciò accade, è possibile che tu debba riavviare nuovamente il tuo servizio Nginx. Puoi farlo con il seguente comando:

  1. sudo systemctl restart nginx

Successivamente, puoi eseguire systemctl status nginx per verificare che il tuo servizio sia di nuovo attivo. Se sei interessato a saperne di più su questi comandi di gestione di base, leggi il nostro tutorial, dove discutiamo su come gestire il processo Nginx.

Altri suggerimenti per la risoluzione dei problemi

Anche se abbiamo esaminato solo tre metodi per la risoluzione degli errori di Nginx, ecco un altro paio di esempi specifici per le impostazioni del firewall e della configurazione.

Regolazione delle impostazioni del firewall

Quando configuri Nginx, il tuo server per impostazione predefinita porta il traffico HTTP 80. Se non hai questa porta aperta per ricevere queste richieste, il tuo sito web non funzionerà correttamente. A seconda della distribuzione, la regolazione delle impostazioni del firewall può variare. Questo esempio utilizzerà Uncomplicated Firewall (ufw). Per confermare se la tua porta è aperta, puoi controllare lo stato con quanto segue:

  1. sudo ufw status

Ancora una volta, è necessario un utente con privilegi e si consiglia un utente abilitato a sudo anziché l'utente root. Se il tuo output restituisce quanto segue, significa che hai la porta 80 appropriata aperta, in particolare è elencato il profilo Nginx HTTP:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Se devi aprire porte aggiuntive, ad esempio 443 per consentire il traffico HTTPS, puoi aggiungere la regola all'elenco:

  1. sudo ufw allow 'Nginx HTTPS'

In alternativa, puoi aggiungere entrambe le regole con il singolo profilo Nginx Full:

  1. sudo ufw allow 'Nginx Full'

Per verificare che le tue porte siano aperte, esegui di nuovo sudo ufw status e, se sono elencate, sei pronto per partire. Puoi anche controllare il tuo browser web per assicurarti che il tuo server sia attivo e funzionante.

Controllo del file di configurazione

Se stai utilizzando un server web Nginx, probabilmente hai impostato un blocco del server, soprattutto se hai seguito il nostro tutorial su Come installare Nginx. Per servire il contenuto HTML che desideri, dovresti avere un blocco di configurazione impostato per il tuo sito. Ecco un esempio di blocco del server con i dettagli di configurazione per il tuo dominio:

server {
       listen 80;
         listen [::]:80;

       root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

Quando aggiungi o aggiorni il file di configurazione, ricorda sempre di salvare quando hai finito. Se stai utilizzando l'editor di testo nano, puoi farlo premendo CTRL + X, Y, quindi INVIO. Il modo principale per risolvere eventuali problemi con il file di configurazione è eseguire il controllo della sintassi sudo nginx -t menzionato in precedenza e abilitare tali modifiche riavviando Nginx con sudo systemctl restart nginx .

Puoi sempre valutare il tuo file di configurazione aprendolo con il tuo editor di testo preferito, come nel seguente:

  1. sudo nano /etc/nginx/sites-available/your_domain

Ricorda che tutte le direttive che hai o aggiungi a questo file devono essere esatte, altrimenti riceverai un errore che qualcosa non è valido.

Conclusione

Questo tutorial ha fornito una guida di riferimento rapida su come risolvere gli errori comuni che potresti riscontrare con Nginx. Come ricorderete, questi comandi forniscono un primo passaggio per la diagnosi del problema, ma potrebbe essere necessario indagare ulteriormente sull'errore. Se non sei sicuro, tuttavia, puoi sempre iniziare controllando il registro degli errori di Nginx per voci dettagliate su ciascun errore. Se sei interessato a una spiegazione più completa di alcuni errori comuni di Nginx, puoi leggere i seguenti tutorial:

  • Errori comuni di sintassi di Nginx
  • Errori comuni di connessione a Nginx
  • Errori di reindirizzamento HTTPS e certificato SSL Nginx