502 Gateway inválido - TooBigHeaders

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

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

Mensagem de erro

O aplicativo cliente recebe o seguinte código de resposta:

HTTP/1.1 502 Bad Gateway

Além disso, você poderá encontrar a seguinte mensagem de erro:

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

Causas possíveis

Esse erro ocorre se o tamanho total dos cabeçalhos enviados pelo destino/back-end de servidor para o Apigee Edge como parte da resposta HTTP é 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 que o limite permitido O tamanho de um cabeçalho específico ou a soma dos tamanhos de todos os cabeçalhos 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 nuvem pública e privada 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 a API Monitoring:

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

  3. Navegue até o menu Analisar > Monitoramento de APIs > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Selecione o filtro Proxy para restringir o código de falha.
  6. Compare Código de falha com Time.
  7. Selecione uma célula que tenha o código de falha protocol.http.TooBigHeaders como mostrados abaixo:

    ( ver imagem maior)

  8. As informações sobre o código de falha serão exibidas protocol.http.TooBigHeaders, conforme mostrado abaixo:

    ( ver imagem maior)

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

    ( ver imagem maior)

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

Ferramenta Trace

  1. Ative a sessão de trace. e:
    1. Aguarde a ocorrência do erro 502 Bad Gateway ou
    2. Se for possível 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 trace.
  3. Navegar pelas diferentes fases do trace e localizar a falha o incidente.
  4. Normalmente, você verá esse erro no fluxo chamado Error logo após o Solicitação enviada para a fase do servidor de destino, conforme mostrado abaixo:

    ( ver imagem maior)

    Observe os valores do erro no trace:

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

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

  5. Você verá a falha na mensagem Response Sent to Client resposta de erro enviada pelo Apigee Edge, conforme mostrado abaixo:

    ( ver imagem maior)

  6. Anote os valores do erro do trace. O trace 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 até a fase AX (Analytics Data Recorded) no trace e clique nele para ver os detalhes relacionados.

    ( ver imagem maior)

    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 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 502 Bad Gateway do HTTP.
  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 de 502 com o código de erro protocol.http.TooBigHeaders durante um período específico (se o problema tiver acontecido no passado) ou se houver alguma solicitação que ainda esteja falhando com 502:
  4. Se você encontrar erros 502 no X-Apigee-fault-code correspondente ao valor de protocol.http.TooBigHeaders, em seguida, determine o valor de X-Apigee-fault-source.

    Exemplo de erro 502 do registro de acesso do NGINX:

    O exemplo de entrada do registro de acesso do NGINX acima 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 que o limite permitido

Diagnóstico

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

    Mensagem de erro

    Para validar usando a mensagem de erro:

    Se você tiver acesso à mensagem de erro completa recebida do Apigee Edge, consulte o faultstring. O faultstring indica 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 o tem cabeçalhos com tamanho total que excede o limite permitido.

    Solicitação real

    Para validar usando a solicitação real:

    Se você tiver acesso à solicitação real feita ao servidor de destino/back-end, Depois, siga estas etapas:

    1. Se você for um usuário da nuvem pública/privada, faça uma solicitação. diretamente do próprio servidor de back-end ou de qualquer outro máquina de onde você pode fazer a solicitação ao back-end servidor.
    2. Se você for usuário da nuvem privada, também poderá fazer a solicitação para o servidor de back-end de um dos processadores de mensagens.
    3. Examine a resposta recebida do servidor de back-end e, especificamente, computar e verificar o tamanho total dos cabeçalhos transmitidos na resposta.
    4. Se você achar que o tamanho dos cabeçalhos na carga útil de resposta for maior 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. Por isso, para este erro, pois ele excede o limite permitido em Apigee Edge (em inglês).

    .

    Registros do processador de mensagens

    Para validar usando registros do processador de mensagens:

    Se você for um usuário da 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á algum erro 502 durante uma duração (se o problema aconteceu no passado) ou se há alguma solicitação ainda falha com 502. Você pode usar a seguinte string de pesquisa:
      grep -ri "response headers size exceeding"
      
    3. Você vai encontrar linhas de 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 recebe a resposta do back-end/destino do servidor e descobre que o tamanho total dos cabeçalhos é maior que 25 KB, ele para e gera o erro:

      response headers size exceeding 25,600

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

Resolução

Corrigir tamanho

Opção 1 [recomendada]: corrija o aplicativo do servidor de destino para não enviar o tamanho dos cabeçalhos excedendo o limite da Apigee

  1. Analise o motivo pelo qual o servidor de destino específico enviou o tamanho do cabeçalho da resposta mais do que o limite permitido, conforme definido em Limites.
  2. Se não for desejável, modifique seu aplicativo de servidor de back-end para que ele envie os cabeçalhos de resposta cujo tamanho é menor que o limite permitido em Apigee Edge (em inglês).
  3. Verifique se as informações do cabeçalho podem ser enviadas como parte do corpo da resposta.
  4. Se viá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 vai exceder o tempo limite de cabeçalho.
.

CwC

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

A Apigee oferece um 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 maiores do que o limite permitido conforme documentado para o tamanho do cabeçalho de solicitação/resposta em Limites do Apigee Edge.

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

Como verificar o limite atual?

Nesta seção, explicamos 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 verificar veja qual valor foi definido conforme mostrado abaixo:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. O resultado de amostra 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 definido com o valor 25k no http.properties.

    Isso indica que o limite para o tamanho do payload de resposta configurado na Apigee para Private Google Cloud tem 25 KB.

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

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

Colete as informações de diagnóstico a seguir 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 da API
  • Comando curl completo usado para reproduzir o erro 502
  • Arquivo de rastreamento para as 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 estas informações:

  • Mensagem de erro completa 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
  • Comando curl completo 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