So sieht die Meldung aus
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 failedHäufige Ursachen
- Ein
server_nameist sehr lang (zum Beispiel eine lange Subdomain), und ein Bucket ist dafür zu klein. - Über mehrere
server-Blöcke kamen viele Servernamen hinzu, die Tabelle braucht eine größere Größe. - Derselbe Name steht an mehreren Stellen, weil eine Datei doppelt eingebunden ist, das bläht die Tabelle auf.
- Eine generierte Konfiguration (Wildcard-Listen, viele Aliase pro Seite) kam hinzu, ohne die Hash-Einstellungen anzuheben.
Prüfen
- Konfigurationstest ausführen
nginx -t - Aktuelle Hash-Einstellungen, falls vorhanden
nginx -T 2>/dev/null | grep -nE 'server_names_hash' - Die längsten konfigurierten Servernamen
nginx -T 2>/dev/null | grep -E '^\s*server_name' | tr -s ' ;' '\n' | awk 'length > 25' | sort -u - Ist eine Datei doppelt eingebunden?
nginx -T 2>/dev/null | grep -E '^# configuration file' | sort | uniq -d
Lösung
- Im
http-Block von/etc/nginx/nginx.confergänzen:server_names_hash_bucket_size 128;(eine Zweierpotenz; die Meldung nennt den aktuellen Wert). - Bleibt der Fehler oder hast du hunderte Namen, zusätzlich
server_names_hash_max_sizeanheben, zum Beispiel1024. - Doppelte Includes entfernen, damit kein Name zweimal definiert ist.
- Testen und anwenden:
nginx -t && systemctl reload nginx.
Häufige Fragen
Welchen Wert soll ich nehmen?
Verdopple den Wert aus der Meldung und probiere es erneut: aus 64 wird 128, bei Bedarf 256. Die Bucket-Größe muss eine Zweierpotenz sein.
Warum erscheint das nach einer weiteren Domain?
Die Tabelle wird beim Laden der Konfiguration dimensioniert. Ein weiterer oder ein längerer Name kann der sein, der nicht mehr passt, obwohl das alte Setup funktionierte.