Estou recebendo 500 erros de servidor interno quando tento fazer um POST HTTP para um endereço específico em meu aplicativo. Verifiquei os logs do servidor no diretório de log personalizado especificado no arquivo de hosts virtuais, mas o erro não aparece lá, portanto, depurar isso tem sido uma dor de cabeça.
Como faço para que o Apache registre erros internos 500 no log de erros?
apache
error-logging
wcolbert
fonte
fonte
Respostas:
Observação: o autor original não estava perguntando especificamente sobre PHP. Todas as respostas centradas em php fazem grandes suposições não relevantes para a questão real.
O log de erros padrão, em oposição aos logs de erros de scripts, geralmente tem o erro (mais) específico. frequentemente, serão permissões negadas ou até mesmo um intérprete que não pode ser encontrado.
Isso significa que a falha quase sempre está no seu script. por exemplo, você carregou um script perl, mas não deu a ele permissões de execução? ou talvez tenha sido corrompido em um ambiente Linux, se você escrever o script no Windows e depois carregá-lo no servidor sem que as terminações de linha sejam convertidas, você obterá este erro.
em perl se você esquecer
você obterá este erro
Existem muitas razões para isso. portanto, primeiro verifique seu log de erros e, em seguida, forneça mais algumas informações.
O log de erro padrão geralmente está em
/var/log/httpd/error_log
ou/var/log/apache2/error.log
.O motivo de você olhar os logs de erros padrão (conforme indicado acima) é porque os erros nem sempre são postados no log de erros personalizado, conforme definido no host virtual.
Assume linux e não necessariamente perl
fonte
grep PHP /var/log/syslog
. Provavelmente porque eu tinhaerror_log = syslog
no/etc/php5/apache2/php.ini
.Por que os 500 erros internos do servidor não estão sendo registrados em seus logs de erro do apache?
Os erros que causam seu 500 Internal Server Error vêm de um módulo PHP. Por padrão, o PHP NÃO registra esses erros. O motivo é que você deseja que as solicitações da Web ocorram o mais rápido fisicamente possível e é um risco à segurança registrar os erros na tela onde os invasores possam observá-los.
Estas instruções para ativar o registro de erro interno do servidor são para
Ubuntu 12.10
comPHP 5.3.10
eApache/2.2.22
.Certifique-se de que o registro do PHP esteja ativado:
Localize seu arquivo php.ini:
Edite esse arquivo como root:
Encontre esta linha em php.ini:
Altere a linha acima para esta:
Mais abaixo no arquivo, você verá o seguinte:
Os pontos-e-vírgulas são comentários, o que significa que as linhas não têm efeito. Altere essas linhas para que fiquem assim:
O que isso comunica ao PHP é que queremos registrar todos esses erros. Aviso, haverá um grande impacto no desempenho, então você não quer que isso seja habilitado na produção porque o registro exige trabalho e trabalho leva tempo, tempo custa dinheiro.
Reiniciar o PHP e o Apache deve aplicar a mudança.
Faça o que você fez para causar o erro 500 Internal Server novamente e verifique o log:
Você deve ver o erro 500 no final, algo assim:
fonte
display_errors
imprime erros na tela .log_errors
grava erros no arquivo de log .Verifique o log de erros do php, que pode ser um arquivo separado do log de erros do apache.
Encontre-o acessando
phpinfo()
e verifique o atributo error_log. Se não estiver definido. Configure-o: https://stackoverflow.com/a/12835262/445131Talvez o seu post_max_size seja muito pequeno para o que você está tentando postar, ou uma das outras configurações de memória máxima seja muito baixa.
fonte
Acabei de encontrar isso e foi devido a uma configuração incorreta de mod_authnz_ldap em meu arquivo .htaccess. Absolutamente nada estava sendo registrado, mas continuei recebendo um erro 500.
Se você se deparar com esse problema específico, pode alterar o nível de registro de mod_authnz_ldap assim:
Isso usará um nível de log de depuração para mod_authnz_ldap, mas avisará para todo o resto ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel ).
fonte
Se as informações de erro interno do servidor não aparecerem nos arquivos de log, você provavelmente precisará reiniciar o serviço Apache .
Descobri que o Apache 2.4 (pelo menos na plataforma Windows) tende a se recusar obstinadamente a liberar arquivos de log - em vez disso, os dados registrados permanecem na memória por um bom tempo. É uma boa ideia do ponto de vista do desempenho, mas pode ser confusa durante o desenvolvimento.
fonte
As respostas de @ eric-leschinski estão corretas.
Mas há outro caso se a API do seu servidor for FPM / FastCGI (padrão no Centos 8 ou você pode verificar usar a função phpinfo ())
Nesse caso:
phpinfo()
em um arquivo php;Loaded Configuration File
param para ver onde está o arquivo de configuração do seu PHP.Verifique os
Server API
parâmetros. Se o seu servidor usa apenas apache handle API -> reinicie o apache. Se o seu servidor usa php-fpm você deve reiniciar o serviço php-fpmVerifique o arquivo de log na pasta de log php-fpm. por exemplo
/var/log/php-fpm/www-error.log
fonte
No meu caso, foi a diretiva ErrorLog em httpd.conf. Apenas acidentalmente percebi isso depois que desisti. Decidi compartilhar a descoberta) Agora eu sei onde encontrar os 500 erros.
fonte
Adicione
HttpProtocolOptions Unsafe
ao seu arquivo de configuração do apache e reinicie o servidor apache. Mostra os detalhes do erro.fonte
Verifique se a versão do php que você está executando corresponde à sua base de código. Por exemplo, seu ambiente local pode estar executando o php 5.4 (e as coisas estão funcionando bem) e talvez você esteja testando seu código em uma nova máquina que possui o php 5.3 instalado. Se você estiver usando a sintaxe 5.4 como [] para array (), você obterá a situação descrita acima.
fonte
Tente acessar um arquivo estático. Se isso não funcionar, vá para todos os diretórios da raiz "/" ou "c: \" para o diretório do seu arquivo e verifique se eles contêm arquivos ".htaccess".
Certa vez, deixei um arquivo em "c: \" e ele teve os resultados mais estranhos.
fonte
Verifique se você está desabilitando o relatório de erros em algum lugar do seu código.
Havia um lugar em meu código onde eu o desabilitei, então adicionei o código de depuração depois dele:
fonte