502 Gateway inválido - TooBigHeaders

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Sintoma

O aplicativo cliente recebe um código de status HTTP de 502 Bad Gateway com código de erro protocol.http.TooBigHeaders como resposta para chamadas de API.

Mensagem de erro

O aplicativo cliente recebe este código de resposta:

HTTP/1.1 502 Bad Gateway

Além disso, talvez você veja a seguinte mensagem de erro:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Causas possíveis

Esse erro vai ocorrer se o tamanho total dos cabeçalhos enviados pelo servidor de destino/back-end para o Apigee Edge como parte da resposta HTTP for maior do que o limite permitido no Apigee Edge.

Estas são as possíveis causas desse erro:

Causa Descrição Instruções de solução de problemas aplicáveis para
O tamanho dos cabeçalhos na resposta é maior do que o limite permitido O tamanho do cabeçalho de um cabeçalho específico ou a soma dos tamanhos de todos os cabeçalhos enviados pelo servidor de destino/back-end como parte da resposta HTTP para o Apigee Edge é maior que o limite permitido no Apigee Edge. Usuários de nuvens públicas e privadas de borda

Etapas comuns do diagnóstico

Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:

Monitoramento de APIs

Para diagnosticar o erro usando o monitoramento de APIs:

  1. Faça login na interface do Apigee Edge como usuário com um papel apropriado.
  2. Alterne para a organização em que você quer investigar o problema.

  3. Navegue até a página Analisar > Monitoramento de API > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Selecione o filtro Proxy para restringir o código da falha.
  6. Trace o Código de falha em relação a Time.
  7. Selecione uma célula com o código de falha protocol.http.TooBigHeaders, conforme mostrado abaixo:

    ( ver imagem ampliada)

  8. Você verá as informações sobre o código de falha protocol.http.TooBigHeaders, conforme mostrado abaixo:

    ( ver imagem ampliada)

  9. Clique em Ver registros e expanda a linha da solicitação com falha.

    ( ver imagem ampliada)

  10. Na janela Registros, observe os seguintes detalhes:
    • Código de status: 502
    • Origem da falha: target
    • Código de falha: protocol.http.TooBigHeaders.
  11. Se a Origem da falha tiver o valor target e o Código de falha tiver o valor protocol.http.TooBigHeaders, isso indica que a resposta HTTP do servidor de destino/ back-end tem cabeçalhos com tamanho maior que o limite permitido no Apigee Edge.

Ferramenta de rastreamento

  1. Ative a sessão de rastreamento e:
    1. Aguarde a ocorrência do erro 502 Bad Gateway ou
    2. Se você conseguir reproduzir o problema, faça a chamada de API e reproduza o erro 502 Bad Gateway.
  2. Selecione uma das solicitações com falha e examine o rastro.
  3. Navegue pelas diferentes fases do rastro e localize onde a falha ocorreu.
  4. Normalmente, você encontra esse erro no fluxo chamado Error logo após a fase Solicitação enviada para o servidor de destino, conforme mostrado abaixo:

    ( ver imagem ampliada)

    Observe os valores do erro do trace:

    • erro: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Isso indica que o Apigee Edge (componente de processador de mensagens) gera o erro assim que recebe a resposta do servidor de back-end devido a um tamanho de cabeçalho que excede o limite permitido.

  5. Você veria a falha na resposta de erro Resposta enviada ao cliente enviada pelo Apigee Edge, conforme mostrado abaixo:

    ( ver imagem ampliada)

  6. Observe os valores do erro do rastro. O rastro de amostra acima mostra:
    • Erro: 502 Bad Gateway.
    • Conteúdo do erro: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Navegue para a fase AX (Analytics Data Recorded) no rastreamento e clique nela para ver os detalhes relacionados.

    ( ver imagem ampliada)

    Observe o valor do seguinte:

    Cabeçalhos de erro Valor
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Conteúdo do erro: corpo {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

Para diagnosticar o erro usando os registros de acesso do NGINX:

  1. Se você for um usuário da nuvem privada, poderá usar os registros de acesso do NGINX para determinar as principais informações sobre o HTTP 502 Bad Gateway.
  2. Verifique os registros de acesso do NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Onde:ORG, ENV e PORT# são substituídos por valores reais.

  3. Pesquise se há algum erro 502 com o código protocol.http.TooBigHeaders durante um período específico (se o problema tiver acontecido anteriormente) ou se ainda há solicitações com falha 502.
  4. Se você encontrar erros 502 com o X-Apigee-fault-code correspondente ao valor de protocol.http.TooBigHeaders, determine o valor de X-Apigee-fault-source.

    Exemplo de erro 502 do registro de acesso do NGINX:

    A entrada de amostra acima do registro de acesso do NGINX tem os seguintes valores para X-Apigee-fault-code e X-Apigee-fault-code :

    Cabeçalhos de erro Valor
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Causa: o tamanho dos cabeçalhos na resposta é maior do que o limite permitido

Diagnóstico

  1. Determine o código de falha, a origem da falha e o tamanho do payload da resposta do erro observado usando o monitoramento de APIs, a ferramenta de rastreamento ou os registros de acesso do NGINX, conforme explicado em Etapas comuns de diagnóstico.
  2. Se a Origem de falha tiver o valor target, isso indica que a resposta enviada pelo servidor de destino/back-end para a Apigee tem cabeçalhos com tamanho maior que o limite permitido no Apigee Edge.
  3. É possível validar se a resposta do destino/back-end tem cabeçalhos com tamanho maior que o limite permitido usando um dos seguintes métodos:

    Mensagem de erro

    Para validar usando a mensagem de erro, siga estas etapas:

    Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte faultstring. O faultstring indica que o tamanho do cabeçalho da resposta excedeu o limite permitido.

    Exemplo de mensagem de erro:

    "faultstring":"response headers size exceeding 25,600"
    

    Na mensagem de erro acima, observe no faultstring que a resposta tem cabeçalhos com tamanho total que excede o limite permitido.

    Solicitação real

    Para validar usando a solicitação real, faça o seguinte:

    Se você tiver acesso à solicitação real feita ao servidor de destino/back-end, execute as seguintes etapas:

    1. Se você for um usuário da nuvem pública/privada, faça uma solicitação diretamente ao servidor de back-end a partir do próprio servidor de back-end ou de qualquer outra máquina de onde você tenha permissão para fazer a solicitação ao servidor de back-end.
    2. Se você for um usuário da nuvem privada, também poderá fazer a solicitação ao servidor de back-end a partir de um dos processadores de mensagens.
    3. Examine a resposta recebida do servidor de back-end e calcule especificamente e verifique o tamanho total dos cabeçalhos transmitidos na resposta.
    4. Se você achar que o tamanho dos cabeçalhos no payload de resposta for maior do que o limite permitido no Apigee Edge, essa será a causa do problema.

      Exemplo de resposta do servidor de destino:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      No exemplo acima, Testheader1 e Testheader2 têm tamanhos maiores, o que é a causa desse erro porque excede o limite permitido no Apigee Edge.

    Registros do processador de mensagens

    Para validar usando os registros do processador de mensagens:

    Se você for um usuário de nuvem privada, poderá usar os registros do processador de mensagens para validar se o tamanho dos cabeçalhos de resposta excedeu o limite permitido no Apigee Edge.

    1. Verifique os registros do processador de mensagens:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Pesquise se há erros 502 durante um período específico (se o problema ocorreu anteriormente) ou se há alguma solicitação que ainda falha com 502. Você pode usar a seguinte string de pesquisa:
      grep -ri "response headers size exceeding"
      
    3. Você encontrará linhas do system.log semelhantes às seguintes. O tamanho dos cabeçalhos de resposta pode variar no seu caso:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
      
    4. Assim que o processador de mensagens receber a resposta do servidor de back-end/destino e descobrir que o tamanho total dos cabeçalhos é maior que 25 KB, ele para e gera o erro:

      response headers size exceeding 25,600

      Isso implica que o tamanho total do cabeçalho é maior que 25 KB, e a Apigee gera o erro quando o tamanho começa a exceder o limite de 25 KB com o código de falha como protocol.http.TooBigHeaders.

Resolução

Corrigir tamanho

Opção 1 [recomendada]: corrigir o aplicativo do servidor de destino para não enviar cabeçalhos que excedem o limite da Apigee

  1. Analise o motivo para o servidor de destino específico enviar o tamanho do cabeçalho de resposta além do limite permitido, conforme definido em Limites.
  2. Se não for, modifique o aplicativo de servidor de back-end para que ele envie cabeçalhos de resposta com tamanho menor que o limite permitido no Apigee Edge.
  3. Verifique se as informações do cabeçalho podem ser enviadas como parte do corpo da resposta.
  4. Se possível, envie qualquer informação grande que você planejava enviar como parte do cabeçalho no corpo da resposta. Isso garante que você não exceda o limite de cabeçalhos de resposta.

CwC

Opção 2 : usar a propriedade CwC para aumentar o limite de tamanho do cabeçalho da resposta

A Apigee fornece uma propriedade CwC que permite aumentar o limite de tamanho dos cabeçalhos de resposta. Para mais detalhes, consulte Como configurar limites para o processador de mensagens.

Limites

A Apigee espera que o aplicativo cliente e o servidor de back-end não enviem tamanhos de cabeçalho acima do limite permitido, conforme documentado para o tamanho do cabeçalho de solicitação/resposta em Limites do Apigee Edge.

  1. Se você for um usuário da nuvem pública, o limite máximo de tamanho de cabeçalhos de solicitação e resposta será conforme documentado em Tamanho do cabeçalho de solicitação/resposta em Limites do Apigee Edge.
  2. Se você for um usuário de nuvem privada , talvez tenha modificado o limite máximo padrão para o tamanho dos cabeçalhos de solicitação e resposta, mesmo que isso não seja uma prática recomendada. Para determinar o limite máximo de tamanho do cabeçalho da resposta, siga as instruções em Como verificar o limite atual.

Como verificar o limite atual?

Esta seção explica como verificar se a propriedade HTTPResponse.headers.limit foi atualizada com um novo valor nos processadores de mensagens.

  1. Na máquina do processador de mensagens, pesquise a propriedade HTTPResponse.headers.limit no diretório /opt/apigee/edge-message-processor/conf e verifique qual valor foi definido conforme mostrado abaixo:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. O resultado do exemplo do comando acima é o seguinte:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. No exemplo de saída acima, observe que a propriedade HTTPResponse.headers.limit foi definida com o valor 25k em http.properties.

    Isso indica que o limite para o tamanho do payload de resposta configurado na Apigee para nuvem privada é de 25 KB.

Se você ainda precisar de ajuda do suporte da Apigee, acesse Precisamos coletar informações de diagnóstico.

É necessário coletar informações de diagnóstico

Reúna as seguintes informações de diagnóstico e entre em contato com o suporte do Apigee Edge:

Se você for um usuário da nuvem pública, forneça as seguintes informações:

  • Nome da organização
  • Nome do ambiente
  • Nome do proxy de API
  • Completar o comando curl usado para reproduzir o erro 502
  • Arquivo de rastreamento das solicitações de API
  • Saída completa da resposta do servidor de destino/back-end junto com o tamanho dos cabeçalhos

Se você for um usuário da nuvem privada, forneça as seguintes informações:

  • Concluir a mensagem de erro observada para as solicitações com falha
  • Nome da organização
  • Nome do ambiente
  • Pacote de proxy de API
  • Arquivo de rastreamento das solicitações de API com falha
  • Completar o comando curl usado para reproduzir o erro 502
  • Saída completa da resposta do servidor de destino/back-end junto com o tamanho dos cabeçalhos
  • Registros de acesso do NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Onde:ORG, ENV e PORT# são substituídos por valores reais.

  • Registros do sistema do processador de mensagens /opt/apigee/var/log/edge-message-processor/logs/system.log