502 Gateway inválido - TooBigHeaders

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

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 o seguinte código de resposta:

HTTP/1.1 502 Bad Gateway

Além disso, você pode observar 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 servidor de destino/back-end para o Apigee Edge como parte da resposta HTTP for maior que o limite permitido permitido no Apigee Edge.

Confira 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 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 do Edge Public e Private Cloud

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 da Apigee Edge como um usuário com um papel apropriado.
  2. Mude para a organização em que você quer investigar o problema.

  3. Acesse a página Analisar > Monitoramento de APIs > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Você pode selecionar o filtro Proxy para restringir o código de falha.
  6. Trace o código de falha em relação ao tempo.
  7. Selecione uma célula que tenha o código de falha protocol.http.TooBigHeaders conforme mostrado abaixo:

    ( ampliar imagem)

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

    ( ampliar imagem)

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

    ( ampliar imagem)

  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 cujo tamanho é maior 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 você puder 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. Navegue pelas diferentes fases do trace e localize onde a falha ocorreu.
  4. Normalmente, esse erro aparece no fluxo chamado Erro logo após a Solicitação enviada ao servidor de destino fase, conforme mostrado abaixo:

    ( ampliar imagem)

    Observe os valores do erro no trace:

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

    Isso indica que o Apigee Edge (componente do 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ê verá a falha na resposta de erro Resposta enviada ao cliente enviada pelo Apigee Edge, conforme mostrado abaixo:

    ( ampliar imagem)

  6. Observe os valores do erro no trace. O exemplo de trace 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 (dados de análise registrados) no trace e clique nela para conferir os detalhes relacionados.

    ( ampliar imagem)

    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 do Private Cloud, poderá usar os registros de acesso do NGINX para determinar as informações principais 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

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

  3. Pesquise para saber se há erros 502 com o código de erro protocol.http.TooBigHeaders durante um período específico (se o problema aconteceu no passado) 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 exemplo acima do registro de acesso do NGINX tem os seguintes valores para X-Apigee-fault-code e X-Apigee-fault-source:

    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 de falha, a origem da falha e o tamanho do payload da resposta para o erro observado usando o Monitoramento de APIs, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns do diagnóstico.
  2. Se a origem da falha tiver o valor target, isso indica que a resposta enviada pelo servidor de destino/back-end para a Apigee tem cabeçalhos cujo tamanho é maior que o limite permitido no Apigee Edge.
  3. Você pode validar se a resposta do destino/back-end tem cabeçalhos cujo tamanho era maior que o limite permitido usando um dos seguintes métodos:

    Mensagem de erro

    Para validar usando a mensagem de erro:

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

    Exemplo de mensagem de erro:

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

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

    Solicitação real

    Para validar usando a solicitação real:

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

    1. Se você for um usuário do Public Cloud/Private Cloud, faça uma solicitação diretamente para o servidor de back-end do próprio servidor de back-end ou de qualquer outra máquina em que você tenha permissão para fazer a solicitação.
    2. Se você for um usuário do Private Cloud, 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, calcule e verifique o tamanho total dos cabeçalhos transmitidos na resposta.
    4. Se você descobrir que o tamanho dos cabeçalhos no payload de resposta é maior que o limite permitido no Apigee Edge, essa é 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, já que excede o limite permitido no Apigee Edge.

    Registros do processador de mensagens

    Para validar usando registros do processador de mensagens:

    Se você for um usuário do Private Cloud, 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 para saber se há erros 502 durante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha 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 servidor de back-end/destino 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 implica que o tamanho total do cabeçalho é maior que 25 KB e o 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 com tamanho que exceda o limite da Apigee

  1. Analise o motivo pelo qual o servidor de destino específico envia o tamanho do cabeçalho de resposta maior que o limite permitido, conforme definido em Limites.
  2. Se não for desejável, modifique o aplicativo do servidor de back-end para que ele envie os cabeçalhos de resposta cujo tamanho seja 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 todas as informações grandes que você planejava enviar como parte do cabeçalho no corpo da resposta. Isso garante que você não exceda o limite do cabeçalho de resposta.

CwC

Opção 2 : usar a propriedade CwC para aumentar o limite de tamanho do cabeçalho de 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 maiores que o 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 do Public Cloud, o limite máximo para o tamanho dos cabeçalhos de solicitação e resposta será documentado para o tamanho do cabeçalho de solicitação/resposta em Limites do Apigee Edge.
  2. Se você for um usuário do Private Cloud , poderá ter modificado o limite máximo padrão para o tamanho dos cabeçalhos de solicitação e resposta (embora não seja uma prática recomendada). Você pode determinar o limite máximo de tamanho do cabeçalho de resposta seguindo 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 /opt/apigee/edge-message-processor/conf diretório e verifique qual valor foi definido, conforme mostrado abaixo:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. O resultado de 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 Private Cloud é de 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

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 do Public Cloud, forneça as seguintes informações:

  • Nome da organização
  • Nome do ambiente
  • Nome do proxy de API
  • Comando curl completo usado para reproduzir o erro 502
  • Arquivo de trace para as solicitações de API
  • Saída completa da resposta do servidor de destino/back-end, juntamente com o tamanho dos cabeçalhos

Se você for um usuário do Private Cloud, forneça as seguintes 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 trace para as 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, juntamente com o tamanho dos cabeçalhos
  • Registros de acesso do NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Em que: 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