Erro 500 Internal Server Error: achar a causa nos logs e colocar o site de volta no ar
· 7 min de leitura
O que o erro significa
Um 500 é a resposta mais vaga que um servidor pode dar: “algo deu errado aqui dentro”. O servidor web recebeu o pedido, mas a aplicação por trás dele (quase sempre PHP: WordPress, WooCommerce, Laravel, uma loja virtual) parou com um erro antes de montar a página. O visitante vê a mensagem genérica ou uma tela branca. O WordPress costuma mostrar “Há um erro crítico no seu site.” e envia um e-mail ao administrador com o motivo.
A boa notícia: a causa exata está sempre em um log. Um 500 não se adivinha, se lê.
Causas frequentes
- Um plugin ou tema depois de uma atualização. Erro fatal do PHP em cada pedido: uma função que não existe mais, um conflito entre plugins, um tema que exige um WordPress mais novo. A causa mais comum, de longe.
- A versão do PHP mudou. A hospedagem desligou o PHP 7.4, ou você ativou o 8.3 no painel, e um plugin antigo usa uma função removida.
- Uma linha errada no
.htaccess. Uma diretiva que o Apache não conhece, um módulo que não está instalado, um plugin de cache ou de segurança que gravou regras inválidas. - Permissões ou dono dos arquivos. Depois de uma migração ou de um upload como root, o PHP não consegue ler ou gravar.
- Memória esgotada. “Allowed memory size exhausted”: um plugin de importação, uma galeria enorme, um
memory_limitbaixo demais. - O banco de dados. Um serviço MySQL parado, dados de acesso errados ou um disco cheio. O WordPress mostra então uma mensagem própria; o guia “Erro ao estabelecer conexão com o banco de dados” trata desse caso.
- Um deploy pela metade. Um
composer installque falhou, um.envfaltando, uma pasta de cache sem permissão de gravação.
Se você é visitante
Um 500 em um site que não é seu não se resolve do seu lado. Recarregue depois de um minuto; se continuar, só quem administra o site pode agir.
Se o site é seu: verifique primeiro
Está fora do ar para todo mundo? Abra o website down checker: ele mostra o código HTTP visto de fora. Um 500 só em algumas páginas aponta para um plugin ou uma rota; em todas, para o PHP, o .htaccess ou o banco de dados.
O que mudou? Quase todo 500 começa logo depois de uma alteração: uma atualização, um plugin novo, a troca da versão do PHP, uma migração. Comece por aí.
Hospedagem compartilhada: o painel tem um log de erros do PHP (“Error log”); vá para o fim dele. Servidor próprio: conecte por SSH e leia os logs, os mais recentes embaixo:
# nginx + PHP-FPM
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/php8.3-fpm.log
# Apache (Debian/Ubuntu)
sudo tail -n 50 /var/log/apache2/error.log
Linhas típicas e o que significam:
PHP Fatal error: Uncaught Error: Call to undefined functionseguido de um caminho emwp-content/plugins/: o plugin desse caminho é o culpado.PHP Parse error: syntax errorem um arquivo do tema: uma edição manual dofunctions.phpdeu errado.Allowed memory size of 134217728 bytes exhausted: memória esgotada..htaccess: Invalid command 'Header'ouRewriteEngine not allowed here: o.htaccessusa um módulo desligado ou uma diretiva proibida.Permission deniedoufailed to open stream: permissões ou dono dos arquivos.Error establishing a database connectionouAccess denied for user: banco de dados.
Soluções no seu servidor
1. Desligar o plugin ou o tema que travou
Se o log não aponta o plugin, ligue o debug do WordPress por um momento:
// wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Recarregue a página e leia wp-content/debug.log: a última linha fatal traz o caminho do plugin ou do tema. Renomeie a pasta dele por SFTP ou SSH (wp-content/plugins/nome para nome.off) ou rode wp plugin deactivate nome, e o site volta. Se o tema é o problema, wp theme activate twentytwentyfour coloca um tema padrão no lugar. Desligue o debug quando terminar.
2. Voltar a versão do PHP
Se o erro cita uma função que não existe, a versão do PHP mudou. Em uma hospedagem, troque de volta no painel; no servidor próprio, confira qual pool e qual versão o site usa:
grep -r fastcgi_pass /etc/nginx/sites-enabled/
php8.3 -v
Mudar de volta ganha tempo; a solução de verdade é atualizar ou substituir o plugin, porque versões antigas do PHP não recebem mais correções de segurança.
3. Testar o .htaccess
Renomeie o arquivo (mv .htaccess .htaccess.bak) e recarregue. Se o site volta, a causa está em uma das linhas; no WordPress, salvar os links permanentes de novo gera um arquivo limpo. No servidor próprio, ative o módulo que falta (sudo a2enmod rewrite headers && sudo apachectl configtest && sudo systemctl reload apache2).
4. Corrigir permissões e dono
sudo chown -R www-data:www-data /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;
Use o usuário do PHP-FPM do seu sistema (em geral www-data). Nunca use 777.
5. Dar memória ao PHP
No php.ini ou no pool (/etc/php/8.3/fpm/pool.d/www.conf): memory_limit = 256M, depois sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm. No WordPress, define('WP_MEMORY_LIMIT', '256M'); no wp-config.php. Se um plugin precisa de mais, o problema é o plugin.
6. Verificar o banco de dados e o disco
systemctl status mysql mariadb 2>/dev/null | grep -E 'service|Active'
df -h
Um serviço parado se inicia com sudo systemctl start mariadb; um disco cheio trava o banco de dados e o PHP ao mesmo tempo: libere espaço antes (sudo journalctl --vacuum-size=200M, backups e logs antigos).
Se o problema está na sua hospedagem
Em uma hospedagem compartilhada você pode desligar plugins, corrigir o .htaccess e trocar a versão do PHP, mas não reiniciar o PHP nem o banco de dados. Se o log não mostra um erro seu, envie à sua hospedagem:
Prezados, meu site example.com está respondendo “500 Internal Server Error” desde aproximadamente 10h20 (UTC). Desativei os plugins e testei o .htaccess; o log de erros do PHP não mostra um erro da aplicação. Poderiam verificar o PHP, o banco de dados e o espaço em disco da minha conta e me informar o que encontraram?
Para não acontecer de novo
Um 500 depois de uma atualização se descobre em um minuto com uma verificação de fora que olha o código HTTP. O monitoramento de servidores com o agente mostra memória e disco por dentro, antes de o PHP travar. Para sites WordPress, a manutenção WordPress sob demanda instala as atualizações e repara quando algo quebra. Erros vizinhos: o erro 503 (sobrecarga ou manutenção) e o erro 403 (permissões ou regras de segurança).
Fora do ar? Nós resolvemos. No seu servidor ou em uma hospedagem compartilhada com acesso SSH, o Quick Fix, o reparo automático a preço fixo, reinicia um serviço parado, libera espaço em disco e corrige pequenos erros de configuração, com cópia de segurança antes. O Deep Fix cuida do resto, em blocos de 15 minutos, 24 horas por dia, inclusive nos fins de semana; a estimativa é o valor máximo.
E agora
Verifique de fora
O site está fora do ar para todos ou só para você, e o que o servidor responde? Grátis, sem cadastro.
Verificador de site fora do arFora do ar? Nós resolvemos.
No seu servidor ou em uma hospedagem compartilhada com acesso SSH: Quick Fix a preço fixo para as causas mais comuns, Deep Fix cobrado em blocos de 15 minutos para todo o resto, 24/7. Preço visível antes do pedido.
Pedir um reparoOutros guias
- Site fora do ar: o que fazer nos primeiros 15 minutos
- Servidor fora do ar: o que verificar e em que ordem
- Erro 502 Bad Gateway: achar a causa e resolver
- Erro 503: sobrecarga, manutenção ou limite da hospedagem?
- Erro 504 Gateway Timeout: achar o que está lento
- Erro 521 e 522 do Cloudflare: o servidor de origem não responde
- DNS_PROBE_FINISHED_NXDOMAIN: o domínio não responde mais
- ERR_CONNECTION_REFUSED: o servidor recusa a conexão
- ERR_CONNECTION_TIMED_OUT: o servidor não responde a tempo
- O que significa “Sua conexão não é particular” e como resolver
- ERR_SSL_PROTOCOL_ERROR: a conexão segura falha antes do certificado
- ERR_TOO_MANY_REDIRECTS: achar o loop de redirecionamentos e fechá-lo
- Erro 403 Forbidden: o que bloqueia o acesso ao seu site
- ERR_NAME_NOT_RESOLVED: o nome do site não é encontrado
- “Erro ao estabelecer conexão com o banco de dados” no WordPress: causa e solução