Nginx 502 Bad Gateway e gli altri quattro errori più frequenti di nginx

Nginx 502 Bad Gateway e altri errori nginx

Nginx 502 Bad Gateway: soluzioni per 502, 504, 403, 404, 413 | We.Inc

Filtra gli errori nginx per codice di stato o indizio nel log e ottieni la causa probabile più la modifica alla config che la risolve. Copre 502, 504, 403, 404 e 413.

Nginx restituisce 502 Bad Gateway quando fa da proxy e l'app dietro di lui non dà una risposta valida: l'app è ferma, è in ascolto su un'altra porta o socket, oppure si è bloccata a metà risposta. Avvia l'app, fai puntare proxy_pass all'indirizzo su cui ascolta davvero, poi leggi l'error log di nginx per il motivo esatto.

Dove punta ogni errore nginx

Scegli il codice di stato che vedi, o digita una parola dal tuo error log, e lo strumento restringe l'elenco alle cause corrispondenti. Ogni scheda indica la causa, la verifica che la conferma e uno snippet di config da adattare. Tutte le schede restano visibili finché non filtri.

Domande frequenti

Un errore 502 è colpa mia o del server?

Da visitatore, niente di ciò che fai lo provoca. Il proxy ha contattato l'applicazione dietro di lui e non ha ricevuto una risposta valida. Da proprietario del sito, la causa è la tua app o le impostazioni del proxy, quindi inizia verificando che il processo upstream sia in esecuzione.

Che differenza c'è tra 502 e 504 in nginx?

Un 502 significa che l'upstream ha risposto male o ha rifiutato la connessione. Un 504 significa che nginx ha aspettato e non è arrivato nulla in tempo. Il primo indica un'app ferma o che va in crash, il secondo un'elaborazione lenta o un timeout troppo basso.

Come aumento il limite di dimensione degli upload in nginx?

Imposta client_max_body_size nel blocco http, server o location, ad esempio client_max_body_size 20m;. Il valore predefinito è 1m. Un valore di 0 disattiva il controllo della dimensione, cosa che raramente vuoi su un sito pubblico.

Perché nginx restituisce 403 per una cartella?

Quando l'URL termina con una barra, nginx cerca un file index come index.html. Se non esiste e autoindex è disattivato, come da impostazione predefinita, non c'è nulla che possa servire. Aggiungi il file index o instrada la richiesta con try_files.

Dove si trova l'error log di nginx?

La sua posizione è definita dalla direttiva error_log nella tua config. Cerca error_log in nginx.conf e nei file inclusi per trovarlo, perché pacchetti e container lo collocano in posti diversi.

Perché un proxy produce errori che non ha causato

Leggi l'error log prima di cambiare qualsiasi cosa

Un blocco proxy che evita gli errori soliti

Un punto di partenza per un'app sulla porta 3000. Inoltra host e schema originali, imposta timeout espliciti e lascia spazio a header più grandi.

Blocco server per un'app Node o Python

Testa con nginx -t, poi ricarica. Adatta la porta e i limiti alla tua app.

L'app dietro nginx non è in esecuzione, quindi la connessione viene rifiutata.

Fai curl dell'indirizzo di proxy_pass dalla macchina di nginx. Una connessione rifiutata lo conferma.

Avvia l'app con un process manager che la riavvii dopo un crash.

proxy_pass punta a una porta o a un socket su cui l'app non è in ascolto.

Confronta l'indirizzo in proxy_pass con quello che l'app stampa all'avvio.

Fai in modo che coincidano esattamente, compresa la parte dell'host.

L'app invia header di risposta più grandi del buffer in cui nginx li legge, ad esempio molti cookie.

Cerca una riga di log che dice che l'header è troppo grande.

Aumenta proxy_buffer_size per quella location. Il valore predefinito è una pagina di memoria, 4k o 8k.

L'app ha impiegato più di proxy_read_timeout tra due letture, 60 secondi di default.

Misura il tempo della stessa richiesta inviata direttamente all'app con curl.

Velocizza l'endpoint o sposta il lavoro in un job in background. Aumenta il timeout solo per quella location.

Nginx non è riuscito nemmeno ad aprire una connessione entro proxy_connect_timeout, 60 secondi di default.

Controlla se c'è un firewall o un host irraggiungibile dal proxy.

Sistema il percorso di rete. La documentazione di nginx precisa che questo timeout di solito non può superare i 75 secondi, quindi aumentarlo non serve.

Un URL che termina con una barra non ha un file index e autoindex è disattivato.

Elenca il contenuto della cartella a cui punta root e cerca index.html.

Aggiungi il file index, o invia la richiesta alla tua app con try_files.

L'utente del worker di nginx non può leggere il file o entrare in una delle cartelle superiori.

Cerca nell'error log una riga permission denied che indica il percorso.

Dai all'utente del worker il permesso di lettura sui file e di esecuzione su ogni cartella superiore.

Una regola allow o deny ha intercettato il visitatore. Le regole vengono controllate in ordine e vince la prima che corrisponde.

Leggi dall'alto in basso ogni riga allow e deny che si applica alla location.

Riordina le regole in modo che l'allow specifico venga prima del deny all generico.

È stato usato root dove serviva alias, quindi nginx aggiunge due volte il prefisso della location al percorso.

Ricostruisci il percorso del file: root aggiunge l'intero URI, alias sostituisce il prefisso corrispondente.

Usa alias, con la barra finale su entrambi i lati, quando il nome della cartella è diverso dall'URL.

Una route di una single page app come /dashboard non ha un file su disco.

La home page si carica ma un refresh su qualsiasi route interna fallisce.

Ripiega su index.html con try_files, così il router dell'app gestisce il percorso.

Il corpo della richiesta supera client_max_body_size, 1m di default.

Gli upload sotto il megabyte funzionano e quelli più grandi falliscono.

Aumenta il limite solo per la location degli upload.

Ricerca errori nginx

Codice di stato

Tutti i codici

Parole dal tuo error log

ad esempio: refused, timed out, denied

Verifica

Soluzione

{n} cause corrispondenti

Nessuna causa corrisponde. Cancella la ricerca o scegli un altro codice.

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito