O erro 500 no Nginx, conhecido como "Internal Server Error", ocorre quando o servidor encontar uma falha inesperada e não consegue processar a requisição. Em ambientes de alta concorrência, o Nginx é frequentemente utilizado como alternativa ao Apache, suportando até 30.000 conexões simultâneas em configurações típicas com PHP FastCGI.
Este erro pode ser causado por diversos fatores. A seguir, apresentamos métodos de diagnóstico e resolução.
Verificação de Espaço em Disco e Inodes
Uma causa comum é a falta de espaço em disco ou inodes esgotados. Utilize comandos do sistema para verificar:
df -h /dev/sda1
df -i /dev/sda1
Se o espaço ou inodes estiverem esgotados, libere recursos removendo logs desnecessários ou arquivos temporários. Considere desativar logs de acesso no Nginx se não forem essenciais, editando o arquivo de configuração principle:
# No bloco http ou server, comente ou remova:
access_log off;
Análise de Configuração do Nginx
Erros de configuração podem gerar o erro 500, especialmente em regras de rewrite ou variáveis indefinidas. Sempre valide a sintaxe antes de reiniciar o serviço:
nginx -t -c /etc/nginx/nginx.conf
Revise regras de rewrite para garantir que não causem loops ou referências inválidas. Por exemplo, evite padrões como:
# Exemplo problemático (ajuste conforme necessário):
rewrite ^/old-path$ $new_variable permanent;
if (!-f $request_filename) {
return 500;
}
Ajustes de Concorrência e Limites do Sistema
Em casos de alta demanda, aumente os limites de arquivos abertos. Modifique as configurações do sistema e do Nginx:
# Edite /etc/security/limits.conf
nginx_worker soft nofile 65000
nginx_worker hard nofile 65000
# No nginx.conf, adicione dentro do bloco main:
worker_processes auto;
worker_rlimit_nofile 65000;
Reinicie os serviços aplicáveis após as alterações. Para o PHP-FPM, use comandos como:
systemctl restart php-fpm
systemctl reload nginx
Inspeção de Logs de Erro
Consulte os logs do Nginx e do PHP para identificar falhas específicas. Os logs padrão estão localizados em:
/var/log/nginx/error.log
/var/log/php-fpm/error.log
Procure por mensagens como "too many open files" ou erros de extensões PHP. Se necessário, ative extensões desativadas no php.ini e reinicie o PHP-FPM.
Problemas de Conexão com Banco de Dados
Erros 500 também podem originar-se de falhas em conexões de banco de dados. Verifique as credenciais e a acessibilidade do servidor de banco de dados através de ferramentas de linha de comando:
mysql -u usuario -p -h host_do_banco
psql -U usuario -d nome_do_banco -h host_do_banco
Certifique-se de que os drivers de banco de dados estejam instalados e configurados corretamente no ambiente PHP.