Solucionar problemas de erros HTTP 4xx e 5xx

Este artigo fornece etapas de solução de problemas para resolver erros de código de status HTTP 4xx e 5xx no IIS (Serviços de Informações da Internet). Os códigos de status 4 xx indicam um problema no lado do cliente, enquanto os códigos de status 5xx indicam um problema no lado do servidor. As diretrizes ajudarão você a identificar a causa desses erros e resolvê-los com eficiência.

Identificar erros 4xx

Os códigos de status HTTP 4xx indicam que ocorreu um erro devido a um problema do lado do cliente. Por exemplo, o navegador do cliente pode ter solicitado uma página que não existe ou o navegador do cliente pode não ter fornecido informações de autenticação válidas.

Para identificar erros 4xx, examine os logs do IIS e os logs HTTPERR:

  • O código de status HTTP é registrado nos logs do IIS. Esse arquivo geralmente é armazenado em C:\inetpub\logs\Logfiles, mas pode ser configurado por meio do Log do IIS no Gerenciador do IIS.

  • Um código de erro 4xx pode ser gerado pelo driver de kernel HTTP.sys, o que significa que essas solicitações podem não chegar ao IIS e, portanto, não serão registradas nos logs do IIS. HTTP.sys registra esses erros em arquivos separados chamados logs HTTPERR. Esse arquivo geralmente é armazenado em C:\Windows\System32\LogFiles\HTTPERR , mas pode ser configurado por meio do registro HKEY\LOCAL\MACHINE\System\CurrentControlSet\Services\HTTP\Parameters\ErrorLoggingDir.

  • Uma maneira de confirmar se a resposta 4xx está vindo de HTTP.sys é coletar um arquivo de rastreamento HAR no cliente e procurar o cabeçalho de resposta Microsoft-HttpApi/2.0.

    Para capturar um arquivo de rastreamento HAR, que registra a interação do navegador com o site, siga as instruções em Capturar um rastreamento do navegador para solução de problemas.

Examinar os logs do IIS

Se você encontrar erros nos logs do IIS, observe o código de status (sc-status) e o código de substatus (sc-substatus) e consulte Visão geral do código de status HTTP para obter mais informações.

Para obter mais informações sobre o código de status e entender qual módulo ou manipulador retornou erros 4xx , colete logs de FREB (Failed Request Trace) no momento em que o problema ocorreu configurando uma regra FREB a ser disparada pelo código de status visto nos logs do IIS.

Examinar os logs HTTPERR

Se você encontrar erros nos logs HTTPERR, anote o motivo (s-reason) e consulte Tipos de erros registrados pela API do servidor HTTP para obter mais informações.

Identificar erros 5xx

Os códigos de status HTTP 5xx indicam que o servidor não pôde concluir a solicitação porque o servidor encontrou um erro ao processar a solicitação. Use as instruções a seguir com base no seu tipo de aplicativo.

500 erros no ASP clássico

Se ocorrer um erro 500 no ASP clássico, verifique o código de erro ou a cs-uri-query mensagem de erro na consulta dos logs do IIS.

Para obter mais informações, capture e examine os logs de FREB (Rastreamento de Solicitação com Falha) para os erros 500.

500 erros no IIS geral

Se ocorrer um erro 500 no IIS geral, examine os logs do IIS, observe o código de status (sc-status) e o código de substatus (sc-substatus) e consulte Visão geral do código de status HTTP para obter mais informações sobre a falha.

Habilite mensagens de erro detalhadas, se possível, para obter mais detalhes. Para habilitar mensagens de erro detalhadas, siga estas etapas:

  1. Abra a janela de comando Executar.

  2. Inicialize o inetmgr.

  3. No Gerenciador do IIS, no painel Conexões localizado no lado esquerdo do console, expanda o nome do computador, expanda Sites e selecione o site de destino.

    Captura de tela do site de destino no Gerenciador do IIS.

  4. Clique duas vezes no ícone Páginas de Erro no painel central.

    Captura de tela do ícone Páginas de erro.

  5. À direita, no painel Ações , selecione Editar Configurações de Recurso.

    Captura de tela da opção Editar configurações de recurso.

  6. Na caixa de diálogo Editar configurações de páginas de erro (onde você escolhe enviar solicitações locais e remotas), o segundo botão de opção é o que você precisa selecionar para retornar erros detalhados para solicitações locais e remotas. Por padrão, a opção inferior é selecionada para enviar erros detalhados enviados apenas para solicitações locais.

    Captura de tela da caixa de diálogo Editar configurações de páginas de erro.

    Não recomendamos o envio de erros detalhados para solicitações remotas, pois essa opção pode expor informações confidenciais à Internet. Você precisa reverter as alterações assim que tiver mais informações sobre a falha.

Para obter mais informações, capture e examine os logs de FREB (Rastreamento de Solicitação com Falha) para os erros 500.

500 erros em ASP.NET

Se ocorrer um erro 500 em ASP.NET, use os seguintes métodos para identificar a causa raiz do erro:

  • Verifique os logs de eventos do aplicativo.

    Verifique os logs de eventos do aplicativo no momento em que o problema ocorreu. ASP.NET registrará os detalhes do erro, incluindo a pilha de chamadas, nos logs de eventos do aplicativo.

    Para acessar os logs de eventos do aplicativo, siga estas etapas:

    1. Abra o menu Iniciar , procure por Visualizador de Eventos e selecione Visualizador de Eventos.
    2. No Visualizador de Eventos, abra o nó Logs do Windows.
    3. Selecione Aplicativo para abrir os Logs de Eventos do Aplicativo.
    4. Procure erros associados ao aplicativo com falha. O valor na coluna Origem para os erros é Módulo AspNetCore do IIS ou Módulo AspNetCore do IIS Express.
  • Capture despejos de memória.

    Em alguns casos, pode ser necessário capturar um despejo de memória de uma exceção específica para examinar os detalhes em torno da exceção que causou o status HTTP 500.

    Para capturar despejos, siga as instruções em Coletar despejos de memória para uma exceção de primeira chance quando ela ocorrer.

    Use a ferramenta de Análise DebugDiag 2 (parte do pacote DebugDiag ) com a regra CrashHangAnalysis nos despejos coletados para gerar um relatório que pode ser usado para examinar a pilha de chamadas e identificar a causa raiz.

    Para gerar um relatório usando a ferramenta DebugDiag Analysis, siga estas etapas:

    1. Abra a análise DebugDiag 2.
    2. Selecione Adicionar arquivos de dados e adicione o (s) arquivo(s) .dmp .
    3. Selecione CrashHangAnalysis e PerfAnalysis e selecione Iniciar Análise.

    Quando terminar, um relatório (.mht) será criado em C:\Arquivos de Programas\DebugDiag\Reports e exibido no Internet Explorer com os resultados e recomendações.

    Se estiver usando DLLs personalizadas, você poderá especificar o Caminho de Pesquisa de Símbolo para os arquivos PDB personalizados seguindo estas etapas:

    1. Abra a ferramenta DebugDiag 2 Collection.
    2. Selecione Ferramentas>, opções e configurações>, pastas e caminhos de pesquisa.
    3. Em Caminho de Pesquisa de Símbolo para Depuração, selecione Procurar para definir o caminho.
  • Capture o rastreamento do Perfview para identificar problemas de ExecutionTimeout.

    Para 500 erros devido ao excesso de ASP.NET ExecutionTimeout, capture um rastreamento e despejos do PerfView para identificar quaisquer atrasos.

500 erros no ASP.NET Core

Se ocorrer um erro 500 no ASP.NET Core, use os seguintes métodos para identificar a causa raiz do erro:

  • Verifique os logs de eventos do aplicativo.

    Para acessar os logs de eventos do aplicativo, siga estas etapas:

    1. Abra o menu Iniciar , procure por Visualizador de Eventos e selecione Visualizador de Eventos.
    2. No Visualizador de Eventos, abra o nó Logs do Windows.
    3. Selecione Aplicativo para abrir os Logs de Eventos do Aplicativo.
    4. Procure erros associados ao aplicativo com falha. O valor na coluna Origem para os erros é Módulo AspNetCore do IIS ou Módulo AspNetCore do IIS Express.
  • Habilite a página de exceção do desenvolvedor.

    A ASPNETCORE_ENVIRONMENT variável de ambiente pode ser adicionada a web.config para executar o aplicativo no ambiente de desenvolvimento. Se você não substituir a configuração de ambiente no código de inicialização do aplicativo usando o UseEnvironment método no construtor de hosts, a variável de ambiente permitirá que a Página de Exceção do Desenvolvedor apareça quando o aplicativo for executado.

    <aspNetCore processPath="dotnet"
        arguments=".\MyApp.dll"
        stdoutLogEnabled="false"
        stdoutLogFile=".\logs\stdout"
        hostingModel="InProcess">
      <environmentVariables>
         <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
    

    A configuração da variável de ambiente para ASPNETCORE_ENVIRONMENT só é recomendada em servidores de teste e de teste não expostos à Internet. Remova a variável de ambiente do arquivo web.config após a solução de problemas.

  • Ative o log do Módulo stdout Principal ASP.NET.

    Para habilitar e visualizar stdout logs, siga estas etapas:

    1. Navegue até a pasta de implantação do site no sistema de hospedagem.

    2. Se a pasta logs não estiver presente, crie-a. Para obter instruções sobre como habilitar o MSBuild para criar a pasta de logs na implantação automaticamente, consulte ASP.NET estrutura de diretório principal.

    3. Edite o arquivo web.config. Defina stdoutLogEnabled e true altere o stdoutLogFile caminho para apontar para a pasta de logs (por exemplo, .\logs\stdout) como o seguinte:

      <aspNetCore processPath="dotnet"
          arguments=".\App.dll"
          stdoutLogEnabled="true"
          stdoutLogFile=".\logs\stdout">
      </aspNetCore>
      
    4. Use stdout como prefixo de nome de arquivo. Um carimbo de data/hora, ID de processo (PID) e extensão de arquivo são adicionados automaticamente quando o log é criado. Um nome de arquivo de log típico é stdout_<timestamp>_<PID>.log.

    5. Verifique se a identidade do pool de aplicativos tem permissões de gravação para a pasta logs.

    6. Salve o arquivo web.config atualizado.

    7. Faça uma solicitação ao aplicativo.

    8. Navegue até a pasta logs. Localize e abra o log mais recente stdout .

    9. Investigue os erros no log.

    Para desativar stdout o registro quando a solução de problemas for concluída, siga estas etapas:

    1. Edite o arquivo web.config.
    2. Defina stdoutLogEnabled como false.
    3. Salve o arquivo.
  • Habilite o log de depuração do Módulo Principal ASP.NET (IIS).

    Para habilitar o log de depuração do Módulo Principal ASP.NET, adicione as seguintes configurações de manipulador ao arquivo web.config do aplicativo:

    <aspNetCore ...>
       <handlerSettings>
         <handlerSetting name="debugLevel" value="file" />
         <handlerSetting name="debugFile" value="c:\temp\ancm.log" />
       </handlerSettings>
    </aspNetCore>
    

    Confirme se o caminho especificado para o log existe e se a identidade do pool de aplicativos tem permissões de gravação para o local.

Erros 502 no ARR

Se ocorrer um erro 502 no ARR (Application Request Routing, roteamento de solicitação de aplicativo), siga as instruções em Solução de problemas de erros 502 no ARR.

Erros 503

Se você encontrar erros 503, o código de substatus (sc-substatus) nos logs do IIS ou s-reason nos logs HTTPERR poderá fornecer algumas dicas.

Para saber mais, veja:

Além disso, consulte o artigo a seguir, que destaca um problema conhecido que pode causar erros 503:

Resposta de HTTP 503 Serviço indisponível: uma causa genérica comum

Coleta de dados

Etapas para capturar logs FREB

Importante

Para configurar logs FREB, verifique se o serviço de função de rastreamento está instalado para o IIS.

Para instalar o serviço de função de rastreamento para o IIS, siga estas etapas:

  1. Abra o Gerenciador do Servidor e selecione Gerenciar>Adicionar Funções e Recursos.
  2. Na janela Assistente para Adicionar Funções e Recursos , selecione Avançar até chegar à página Funções de Servidor .
  3. Expanda Servidor Web (IIS)>>Web e marque a caixa de seleção Rastreamento.
  4. Selecione Avançar para as etapas subsequentes e, em seguida, selecione Instalar.

Depois que o serviço de função de rastreamento estiver instalado, siga estas etapas para capturar o FREB:

  1. Abra a janela de comando Executar.

  2. Inicialize o inetmgr.

  3. No Gerenciador do IIS, no painel Conexões , expanda o nome do computador, expanda Sites e selecione o site de destino.

    Captura de tela do site de destino no gerenciador do IIS.

  4. Clique duas vezes em Regras de rastreamento de solicitação com falha.

    Captura de tela da página inicial do site padrão.

  5. No painel Ações, selecione Adicionar.

  6. No assistente Adicionar Regra de Rastreamento de Solicitação com Falha, na página Especificar Conteúdo a Rastrear, selecione Todo o conteúdo>Avançar.

    Captura de tela da página Especificar Conteúdo a Ser Rastreado na janela Adicionar Regra de Rastreamento de Solicitação com Falha.

  7. Na página Definir Condições de Rastreamento, atualize o campo Código(s) de status para 400-600 e selecione Avançar.

    Captura de tela da página Definir Condições de Rastreamento.

  8. Na página Selecionar Provedores de Rastreamento , em Provedores, marque todas as caixas de seleção. Em Áreas, certifique-se de que todas as caixas de seleção estejam marcadas para cada provedor. Em Detalhamento, selecione Detalhado. Selecione Concluir.

  9. Habilite o Rastreamento de Solicitação com Falha para o site e configure o Diretório de Arquivos de Log:

    1. No painel Conexões, expanda o nome do computador, expanda Sites e selecione Site Padrão.

    2. No painel Ações, em Configurar, selecione Rastreamento de Solicitação com Falha.

      Captura de tela da opção Rastreamento de Solicitação com Falha.

    3. Na caixa de diálogo Editar Configurações de Rastreamento de Solicitação com Falha do Site, marque a caixa de seleção Habilitar, defina o campo Diretório como %SystemDrive%\inetpub\logs\FailedReqLogFiles e defina Número máximo de arquivos de rastreamento como 1000.

      Captura de tela da janela Editar Configurações de Rastreamento de Solicitação com Falha no Site.

    4. Selecione OK.

Etapas para capturar um rastreamento e despejos do PerfView

Para capturar um rastreamento e despejos do PerfView, siga as etapas nas seções a seguir.

Configurar PerfView e Procdump antes do problema

Antes que o problema ocorra, siga estas etapas para configurar o PerfView e o Procdump para coleta de dados:

  1. Baixar ProcDump. É um arquivo executável leve que não requer instalação e automatiza a coleta de despejos.

  2. Extraia o arquivo procdump.exe para uma pasta específica no servidor.

  3. Baixe a ferramenta PerfView no servidor. É uma ferramenta de criação de perfil que captura eventos ETW (Rastreamento de Eventos para Windows) (sem necessidade de instalação).

  4. Para que o PerfView forneça informações úteis, adicione Rastreamento como um Serviço de Função para o IIS. Sem o rastreamento habilitado, um rastreamento ETW incluirá apenas HTTP.sys informações. Se você não tiver certeza se o serviço de função de rastreamento está instalado, siga estas etapas:

    1. Abra o Gerenciador do Servidor e selecione Gerenciar>Adicionar Funções e Recursos.
    2. Na janela Assistente para Adicionar Funções e Recursos , selecione Avançar até chegar à página Funções de Servidor .
    3. Expanda Servidor Web (IIS)>>Web e marque a caixa de seleção Rastreamento.
    4. Selecione Avançar para as etapas subsequentes e, em seguida, selecione Instalar.
  5. Abra a ferramenta PerfView, selecione o menu Coletar e selecione a opção Coletar .

  6. Marque as caixas de seleção Zip, Merge e Thread Time , conforme mostrado na captura de tela a seguir. Modifique o campo MB circular para 2000:

    Captura de tela da seleção de Zip, Merge e Thread Time.

  7. Expanda a guia Opções Avançadas e marque a caixa de seleção IIS, conforme mostrado na captura de tela a seguir.

    Captura de tela da coleta de dados em um intervalo especificado pelo usuário.

    Se você estiver executando um aplicativo ASP.NET Core, adicione a seguinte cadeia de caracteres em Provedores adicionais:

    *Microsoft-Extensions-Logging:4:5,Microsoft-AspNetCore-Server-Kestrel,System.Net.Http,System.Net.Sockets,System.Net.NameResolution,System.Threading.Tasks.TplEventSource::5,Microsoft-System-Net-Http,Microsoft-Windows-Application Server-Applications::Verbose

    Observação

    Não perca o asterisco (*) no início.

Coletar dados durante a emissão

Durante o período do problema, siga estas etapas para coletar dados:

  1. Selecione o botão Iniciar coleta no PerfView com as definições de configuração definidas na seção Configurar PerfView e Procdump antes do problema .

  2. Abra o Gerenciador do IIS (Serviços de Informações da Internet) .

  3. Selecione o nome do seu servidor (à esquerda).

  4. Clique duas vezes em Processos de Trabalho para ver a ID do Processo dos serviços. Por exemplo:

    Captura de tela dos processos de trabalho no Gerenciador do IIS.

  5. Abrir o Prompt de Comando como administrador.

  6. Navegue até a pasta onde procdump.exe é extraído executando cd <path to procdump.exe> na janela do prompt de comando.

  7. Execute o comando a seguir para capturar despejos consecutivos.

    procdump.exe -accepteula -ma <PID of W3WP.exe)> -s 10 -n 3

    Observação

    Substitua <PID of W3WP.exe> pelo PID real do processo W3WP.exe que você encontrou na etapa 4.

    • Você pode especificar um caminho no final do comando para armazenar os despejos em um local específico.
    • Esse comando capturará três conjuntos de despejos em intervalos de 10 segundos.
  8. Depois que os despejos forem coletados pelo procdump, pare o PerfView selecionando Parar coleta ou aguarde dois minutos e meio para que ele pare automaticamente. Permita que o PerfView mescle os dados coletados, o que pode levar algum tempo. E ele irá gerar um arquivo Perfview.etl.zip . Se você solicitar símbolos, selecione Usar Servidores de Símbolos da Microsoft.

Mais informações