Hoe Los Je De "[emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size" Nginx Fout Op?

Gepubliceerd 21 juli 2024

Probleem: Nginx Server Names Hash Fout

De "[emerg] could not build the server_names_hash" fout in Nginx treedt op wanneer de server niet genoeg geheugen kan toewijzen voor de hash-tabel die servernamen opslaat. Dit probleem doet zich meestal voor wanneer er te veel servernamen of zeer lange servernamen in de Nginx-configuratie staan.

Het Nginx Server Names Hash Probleem Oplossen

De server_names_hash_bucket_size verhogen

Om de server names hash fout in Nginx te herstellen, moet je de server_names_hash_bucket_size waarde verhogen. Zo doe je dat:

  1. Open je Nginx configuratiebestand:

    sudo nano /etc/nginx/nginx.conf
  2. Zoek het http blok en voeg deze regel toe of wijzig deze:

    server_names_hash_bucket_size 64;
  3. Als de fout aanhoudt, probeer dan de waarde te verhogen naar 128 of de volgende macht van twee.

  4. Bewaar het bestand en sluit de tekstbewerker af.

  5. Test de nieuwe configuratie:

    sudo nginx -t
  6. Als de test slaagt, herstart Nginx:

    sudo systemctl restart nginx

De voorgestelde startwaarde voor server_names_hash_bucket_size is 64. Je moet dit mogelijk aanpassen op basis van je configuratie. Als je veel servernamen of lange domeinnamen hebt, moet je deze mogelijk meer verhogen.

Nadat je wijzigingen hebt aangebracht, test altijd je configuratie voordat je Nginx herstart. Dit helpt uitvaltijd veroorzaakt door configuratiefouten te voorkomen.

Tip: Optimaliseer server_names_hash_max_size

Als het verhogen van server_names_hash_bucket_size het probleem niet oplost, moet je mogelijk ook de server_names_hash_max_size aanpassen. Voeg deze regel toe aan je http blok:

server_names_hash_max_size 512;

Deze waarde moet worden verhoogd als je een groot aantal servernamen hebt. Begin met 512 en verhoog indien nodig.

Alternatieve Oplossingen voor Nginx Servernaam Problemen

Server block configuraties optimaliseren

Om je Nginx server block configuraties beter te maken, probeer deze tips:

  1. Groepeer vergelijkbare servernamen: Combineer server blocks met vergelijkbare configuraties om het aantal afzonderlijke blocks te verminderen.

  2. Gebruik location blocks: Gebruik location blocks om specifieke URL-patronen af te handelen, waardoor de behoefte aan meerdere server blocks vermindert.

  3. Verwijder ongebruikte servernamen: Verwijder alle servernamen die je niet langer gebruikt om de grootte van de hash-tabel te minimaliseren.

  4. Gebruik kortere servernamen: Gebruik waar mogelijk kortere domeinnamen om de totale lengte van servernamen te verminderen.

  5. Implementeer servernaam aliassen: Gebruik server_name richtlijnen met meerdere domeinnamen om variaties van dezelfde site af te handelen.

Tip: Gebruik Reguliere Expressies voor Servernamen

Gebruik reguliere expressies in je server_name richtlijn om meerdere domeinen met een enkele regel te matchen. Bijvoorbeeld:

server_name ~^(www\.)?example\.(com|org|net)$;

Dit matcht example.com, www.example.com, example.org, www.example.org, example.net, en www.example.net.

Wildcard servernamen gebruiken

Wildcard servernamen in Nginx laten je meerdere subdomeinen matchen met een enkel server block. Dit kan helpen het aantal server blocks te verminderen en je configuratie te vereenvoudigen.

Om wildcard servernamen in Nginx te implementeren:

  1. Open je Nginx configuratiebestand:

    sudo nano /etc/nginx/nginx.conf
  2. Voeg een server block toe met een wildcard servernaam:

    server {
       listen 80;
       server_name *.example.com;
       # Andere configuratie richtlijnen
    }
  3. Je kunt ook meer specifieke wildcard patronen gebruiken:

    server_name www.*.example.com;
    server_name *.example.*;
  4. Bewaar het bestand en sluit de tekstbewerker af.

  5. Test de nieuwe configuratie:

    sudo nginx -t
  6. Als de test slaagt, herstart Nginx:

    sudo systemctl restart nginx