Come appare il messaggio
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx: configuration file /etc/nginx/nginx.conf test failedCause frequenti
- Un
server_nameè molto lungo (per esempio un sottodominio lungo) e un bucket è troppo piccolo per contenerlo. - Sono stati aggiunti molti nomi in diversi blocchi
servere la tabella richiede una dimensione maggiore. - Lo stesso nome compare in più punti perché un file è incluso due volte, e questo gonfia la tabella.
- È stata aggiunta una configurazione generata (liste wildcard, molti alias per sito) senza alzare le impostazioni hash.
Verifica
- Esegui il test della configurazione
nginx -t - Impostazioni hash attuali, se presenti
nginx -T 2>/dev/null | grep -nE 'server_names_hash' - I server name configurati più lunghi
nginx -T 2>/dev/null | grep -E '^\s*server_name' | tr -s ' ;' '\n' | awk 'length > 25' | sort -u - Un file è incluso due volte?
nginx -T 2>/dev/null | grep -E '^# configuration file' | sort | uniq -d
Soluzione
- Aggiungi nel blocco
httpdi/etc/nginx/nginx.conf:server_names_hash_bucket_size 128;(una potenza di due; il messaggio indica il valore attuale). - Se l'errore resta o hai centinaia di nomi, alza anche
server_names_hash_max_size, per esempio1024. - Rimuovi gli include duplicati, così nessun nome è definito due volte.
- Testa e applica:
nginx -t && systemctl reload nginx.
Domande frequenti
Che valore devo usare?
Raddoppia il valore del messaggio e riprova: da 64 a 128, poi 256 se serve. La dimensione del bucket deve essere una potenza di due.
Perché compare dopo aver aggiunto un altro dominio?
La tabella viene dimensionata al caricamento della configurazione. Un nome in più o più lungo può essere quello che non entra più, anche se la vecchia configurazione funzionava.