Come appare il messaggio
limiting requests, excess: 20.640 by zone "perip", client: 198.51.100.7, server: example.com, request: "GET /api/ HTTP/1.1"Cause frequenti
- Scatta
limit_reqolimit_conn: di default nginx risponde 503. - Applicazione in maintenance mode, ad es. Nextcloud con
maintenance => true. - Il load balancer (HAProxy, LB cloud) non trova backend sani.
- Worker di PHP-FPM o dell'app saturi, coda piena.
- Servizio non ancora pronto dopo aggiornamento o riavvio.
Verifica
- Controlla gli header: Server e Retry-After dicono chi risponde
curl -sSI https://example.com/ | head -n 5 - Cerca nell'error.log i blocchi del rate limit
grep -E 'limiting (requests|connections)' /var/log/nginx/error.log | tail -n 5 - Trova limiti e risposte 503 fisse nella config
nginx -T 2>/dev/null | grep -nE 'limit_req|limit_conn|return 503' - Mostra i servizi falliti
systemctl --failed
Soluzione
- Per il rate limit imposta bene
burstenodelaye restituisci il codice giusto conlimit_req_status 429;. - Disattiva la maintenance mode dell'app, ad es.
occ maintenance:mode --off. - Controlla gli health check del load balancer: percorso, porta e codice atteso.
- Adegua il numero di worker a RAM e carico, ad es.
pm.max_childrenin PHP-FPM. - Riavvia il servizio e guarda nel journal perché non era pronto.
Domande frequenti
Che differenza c'è tra 502 e 503?
502 significa che il backend ha risposto in modo non valido o non ha risposto. 503 significa servizio temporaneamente non disponibile, voluto o per sovraccarico.
Un 503 danneggia il ranking su Google?
Non nel breve: il 503 serve proprio a questo. Se dura giorni, Google toglie pagine dall'indice. Durante la manutenzione invia un header Retry-After.