Nginx regge migliaia di connessioni per worker senza fatica. Se il suo sito è lento, quasi sempre sta aspettando il PHP o il database che gli sta dietro. Alzare questi numeri sposta la coda, non la accorcia.
I due numeri
worker_processes auto; # one per CPU core - leave it
events {
worker_connections 1024; # per worker
multi_accept on;
}
auto segue il numero di core, ed è la risposta giusta su ogni macchina al di qua di una molto insolita. La capacità totale è i worker moltiplicati per le connessioni, e un browser che apre più connessioni verso un solo sito conta più volte.
L'errore che vuol dire: alzalo
grep "worker_connections are not enough" /var/log/nginx/error.log
Quella riga, e soltanto quella, è un motivo per alzare il numero. Senza di essa, non è quel limite che sta toccando.
Qual è di solito il limite vero
- I figli di PHP-FPM - la coda è lì, non in Nginx. Veda dimensionare un pool PHP-FPM.
- Le connessioni al database - veda troppe connessioni.
- I file aperti - il worker tocca il limite di sistema molto prima del proprio.
# the one worth raising, with the connections
worker_rlimit_nofile 65535;
Per applicare si ricarica, non si riavvia mai
sudo nginx -t && sudo systemctl reload nginx
Un reload avvia nuovi worker per le nuove connessioni e lascia finire i vecchi. Un restart butta via ciò che è in volo, e su un sito affollato quello è un errore che qualcuno vede.