Problema: Erro de Hash de Nomes de Servidor no Nginx
O erro "[emerg] could not build the server_names_hash" no Nginx ocorre quando o servidor não consegue alocar memória suficiente para a tabela hash que armazena os nomes dos servidores. Esse problema geralmente acontece quando há muitos nomes de servidor ou nomes muito longos na configuração do Nginx.
Resolvendo o Problema de Hash de Nomes de Servidor no Nginx
Aumentando o server_names_hash_bucket_size
Para corrigir o erro de hash de nomes de servidor no Nginx, você precisa aumentar o valor de server_names_hash_bucket_size. Veja como fazer:
-
Abra o arquivo de configuração do Nginx:
sudo nano /etc/nginx/nginx.conf
-
Encontre o bloco http e adicione ou modifique esta linha:
server_names_hash_bucket_size 64;
-
Se o erro persistir, tente aumentar o valor para 128 ou a próxima potência de dois.
-
Salve o arquivo e saia do editor de texto.
-
Teste a nova configuração:
sudo nginx -t
-
Se o teste passar, reinicie o Nginx:
sudo systemctl restart nginx
O valor inicial sugerido para server_names_hash_bucket_size é 64. Você pode precisar ajustar isso com base na sua configuração. Se você tiver muitos nomes de servidor ou nomes de domínio longos, pode ser necessário aumentá-lo mais.
Após fazer alterações, sempre teste sua configuração antes de reiniciar o Nginx. Isso ajuda a evitar tempo de inatividade causado por erros de configuração.
Dica: Otimize o server_names_hash_max_size
Se aumentar o server_names_hash_bucket_size não resolver o problema, você também pode precisar ajustar o server_names_hash_max_size. Adicione esta linha ao seu bloco http:
server_names_hash_max_size 512;
Esse valor deve ser aumentado se você tiver um grande número de nomes de servidor. Comece com 512 e aumente conforme necessário.
Soluções Alternativas para Problemas de Nome de Servidor no Nginx
Otimizando configurações de blocos de servidor
Para melhorar suas configurações de blocos de servidor no Nginx, tente estas dicas:
-
Agrupe nomes de servidor semelhantes: Combine blocos de servidor com configurações similares para reduzir o número de blocos separados.
-
Use blocos de localização: Use blocos de localização para lidar com padrões de URL específicos, reduzindo a necessidade de múltiplos blocos de servidor.
-
Remova nomes de servidor não utilizados: Exclua quaisquer nomes de servidor que você não use mais para minimizar o tamanho da tabela hash.
-
Use nomes de servidor mais curtos: Quando possível, use nomes de domínio mais curtos para reduzir o comprimento geral dos nomes de servidor.
-
Implemente aliases de nome de servidor: Use diretivas server_name com múltiplos nomes de domínio para lidar com variações do mesmo site.
Dica: Use Expressões Regulares para Nomes de Servidor
Utilize expressões regulares na sua diretiva server_name para corresponder a múltiplos domínios com uma única regra. Por exemplo:
server_name ~^(www\.)?exemplo\.(com|org|net)$;
Isso corresponde a exemplo.com, www.exemplo.com, exemplo.org, www.exemplo.org, exemplo.net e www.exemplo.net.
Usando nomes de servidor com curinga
Nomes de servidor com curinga no Nginx permitem que você corresponda a múltiplos subdomínios com um único bloco de servidor. Isso pode ajudar a reduzir o número de blocos de servidor e simplificar sua configuração.
Para implementar nomes de servidor com curinga no Nginx:
-
Abra seu arquivo de configuração do Nginx:
sudo nano /etc/nginx/nginx.conf
-
Adicione um bloco de servidor com um nome de servidor curinga:
server { listen 80; server_name *.exemplo.com; # Outras diretivas de configuração }
-
Você também pode usar padrões curinga mais específicos:
server_name www.*.exemplo.com; server_name *.exemplo.*;
-
Salve o arquivo e saia do editor de texto.
-
Teste a nova configuração:
sudo nginx -t
-
Se o teste passar, reinicie o Nginx:
sudo systemctl restart nginx