503 Serviço indisponível - Falha na criação do túnel do proxy com 403

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 503 Service Unavailable com o código de erro protocol.http.ProxyTunnelCreationFailed como uma resposta para chamadas de API.

Mensagem de erro

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

HTTP/1.1 503 Service Unavailable

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

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

Proxy de encaminhamento e tunelamento

O Apigee Edge permite que os proxies de API se comuniquem com o servidor de back-end por um proxy de destino, conforme explicado nas Configurar o proxy de encaminhamento. O servidor proxy abre um servidor proxy (HTTP) com o servidor de back-end, dependendo do tipo de proxy (indicado) pela propriedade HTTPClient.proxy.type) usada e transfere os dados em ambas as direções. Isso é conhecido como encapsulamento.

Por padrão, o Apigee Edge usa o tunelamento para todo o tráfego. Para desativar o encapsulamento, a propriedade O HTTPClient.use.tunneling precisa ser definido como false.

Código de erro: protocol.http.ProxyTunnelCreationFailed

O Apigee Edge retornará o código de erro protocol.http.ProxyTunnelCreationFailed se o servidor proxy não pode criar um túnel entre o Apigee Edge e o servidor de back-end devido a como firewall, restrições de lista de controle de acesso (ACL, na sigla em inglês), problemas de DNS, servidores de back-end indisponibilidade, tempos limite etc.

O código de status no faultstring da resposta do Apigee Edge normalmente indica uma possível causa de alto nível que levou a esse erro.

Modelo de string de falhas:

Proxy refused to create tunnel with response status STATUS_CODE

Possíveis causas para alguns dos códigos de status observados em faultstring:

A tabela a seguir descreve as possíveis causas dependendo do código de status indicado no faultstring:

String de falha Descrição
O proxy recusou a criação de túnel com status de resposta 403

403 - Forbidden

Isso pode acontecer devido a restrições de firewall ou ACL configuradas no servidor de back-end que impede a criação do túnel.

O proxy recusou a criação de túnel com status de resposta 503

503 - Service Unavailable

Isso pode acontecer devido a problemas de DNS, restrições de firewall, erros de que impede a criação de um túnel

O proxy recusou a criação de túnel com status de resposta 504

504 - Gateway Timeout

Isso pode acontecer se houver tempos limite durante a criação do túnel

Dependendo do código de status observado no faultstring, será necessário usar e técnicas apropriadas para solucionar o problema. Este playbook explica como resolver problemas o problema se você observar o código de status 403 em faultstring para o código de erro protocol.http.ProxyTunnelCreationFailed.

Causas possíveis

Esse erro (código de status 403) ocorre se houver algum firewall ou ACL (código de lista de controle) restrições configuradas no servidor de back-end que impedem o túnel de ser criado entre o Apigee Edge e o servidor de back-end pelo servidor proxy.

Causa Descrição Instruções de solução de problemas aplicáveis para
Proxy recusou a criação de túnel com status de resposta 403 O servidor proxy se recusa a criar o túnel porque recebe o nome do host do servidor proxy em vez do nome do host do servidor de back-end no cabeçalho Host. Apenas usuários da nuvem privada de borda

Etapas comuns do diagnóstico

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

Ferramenta Trace

Para diagnosticar o erro usando a ferramenta Trace:

  1. Ative a sessão de rastreamento e de uma destas formas:
    • Aguarde a ocorrência do erro ou
    • Se você puder reproduzir o problema, faça a chamada de API para reproduzir o problema 503 Service Unavailable com Proxy refused to create tunnel with response status 403.
  2. Verifique se Mostrar todos os FlowInfos está ativado:

  3. Selecione uma das solicitações com falha e examine o trace.
  4. Navegar pelas diferentes fases do trace e localizar a falha o incidente.
  5. Normalmente, o erro aparecerá após a fase Meta de fluxo de solicitação iniciado. conforme mostrado abaixo:

    Observe as seguintes informações:

    erro: Proxy refused to create tunnel with response status 403

  6. Navegue até a fase AX (dados do Analytics registrados) no trace e clique nela.
  7. Role para baixo até a seção Stage Details Response Headers e Determine os valores de X-Apigee-fault-code e X-Apigee-fault-source como mostrados abaixo:

    ( ver imagem maior)

    ( ver imagem maior)

  8. Você vai encontrar os valores de X-Apigee-fault-code e X-Apigee-fault-source como protocol.http.ProxyTunnelCreationFailed e target , respectivamente, indicando que esse erro é causado porque o túnel proxy ocorreu uma falha na criação porque o cabeçalho do host esperado não foi recebido.

    Cabeçalhos de resposta Valor
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

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 HTTP 503 Service Unavailable erros.
  2. Verifique os registros de acesso do NGINX:

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

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

  3. Pesquise se há algum erro 503 com o código de erro. protocol.http.ProxyTunnelCreationFailed durante um período específico (se o ocorreu no passado) ou se há alguma solicitação ainda falhando com 503:
  4. Se houver algum 503 erro no X-Apigee-fault-code correspondente ao valor de protocol.http.ProxyTunnelCreationFailed, Depois, determine o valor de X-Apigee-fault-source.

    Exemplo de erro 503 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-source:

    Cabeçalhos de resposta Valor
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Causa: o proxy recusou a criação do túnel com status de resposta 403

Diagnóstico

  1. Determine o código da falha e a origem da falha do 503 Service Unavailable usando os registros de acesso da ferramenta Trace ou do NGINX, conforme explicado em Etapas comuns de diagnóstico.
  2. Analise a mensagem de erro e determine o código de status. indicado em faultstring em caso de falha na criação do túnel.
  3. Nesse cenário, o código de status é 403, que significa Forbidden.
  4. Isso significa que não há direitos ou privilégios suficientes para criar o túnel. Isso poderia isso geralmente acontece quando há restrições de firewall ou de ACL (lista de controle de acesso) impedir a criação do túnel.
  5. Analise as restrições de firewall e/ou ACL configuradas no servidor de back-end que pode impedir a criação do túnel.
  6. Dependendo do tipo de restrições de firewall e/ou ACL, é necessário corrigir o problema adequadamente.
  7. Vamos usar um exemplo de restrição de firewall para explicar como solucionar esse problema problema:

    Cenário: a restrição do firewall no servidor de back-end espera que o cabeçalho do host sempre precise contêm o nome do host do servidor de back-end

    É possível usar uma das seguintes maneiras para determinar o cabeçalho do host transmitido pela Apigee Edge:

    Trace

    Para determinar o cabeçalho do host usando o Trace:

    1. Verifique se faultstring contém Proxy refused to create tunnel with response status 403 usando o trace explicado em Etapas comuns de diagnóstico.
    2. Navegue até a fase Fluxo de solicitação de destino iniciado e analise as Cabeçalhos de solicitação
    3. Verifique o valor do nome do host especificado no Cabeçalho do host no seção Cabeçalhos de solicitação.
    4. Se o cabeçalho Host tiver o nome do host de proxy, esse será o para este erro.
    5. Isso ocorre porque o firewall está configurado no servidor de back-end para aceitar os solicitar apenas se o cabeçalho do host contiver o nome do servidor de back-end.
    6. Portanto, quando o servidor proxy tenta criar o túnel com o servidor de back-end, ele falha com o erro

      Proxy refused to create tunnel with response status 403.

      Exemplo de trace mostrando o cabeçalho do host com o nome do host do proxy

      ( ver imagem maior)

      No exemplo de trace mostrado acima, ele mostra que o Host Header contém o nome do host de proxy www.proxyserver.com. Como não há uma restrição de firewall configurada no servidor de back-end que espera apenas o nome de host do servidor de back-end incluído no cabeçalho do host, você recebe o erro Proxy refused to create tunnel with response status 403.

    tcpdump

    Para determinar o cabeçalho do host usando o tcpdump

    1. Capturar um tcpdump no servidor proxy para as solicitações provenientes o componente "Processador de mensagens" do Apigee Edge com o seguinte comando:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      Para mais informações sobre como usar o comando tcpdump, consulte tcpdump.

    2. Analise os dados do tcpdump usando o a ferramenta Wireshark ou semelhante .
    3. Aqui está um exemplo de análise tcpdump usando o Wireshark:

      ( ver imagem maior)

    4. Os números de pacote 13, 14 e 15 mostram que a mensagem O processador está estabelecendo uma conexão com o servidor proxy por uma conexão TCP de três vias processo de handshake.
    5. No pacote 16, o processador de mensagens se conectou ao host do proxy httpbin.org (mostrado no exemplo acima).
    6. selecione o pacote 16, examine o conteúdo dele em detalhes e especificamente o cabeçalho do host passado ao servidor proxy pelo objeto Processador

    7. O exemplo acima mostra o Cabeçalho do host httpin.org, que é o nome do host do servidor proxy. Portanto, quando o servidor proxy tenta Crie o túnel com o servidor de back-end transmitindo o cabeçalho do host acima. httpin.org, ele falhará com o erro Proxy refused to create tunnel with response status 403.

Resolução

Cenário: a restrição do firewall no servidor proxy espera que o cabeçalho do host fique sempre conter o nome do host do servidor de back-end

Se você tiver certeza de que esse erro foi causado pelo fato do firewall no servidor de back-end estar configurado para esperar que o cabeçalho do host sempre contenha o servidor de back-end nome do host, enquanto o processador de mensagens envia o nome do host do servidor proxy e execute siga estas etapas para resolver o problema:

  1. Defina a propriedade use.proxy.host.header.with.target.uri como verdadeira no TargetEndpoint, conforme mostrado neste exemplo:

    Exemplo de configuração do TargetEndpoint:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  2. Certifique-se de que as outras propriedades relacionadas proxy de encaminhamento de chamadas do Google são configuradas no processador de mensagens da seguinte maneira:

    1. Revise o arquivo /opt/apigee/customer/application/message-processor.properties em cada um dos processadores de mensagens.
    2. Verifique se as propriedades a seguir estão definidas de acordo com seu caso de uso ou requisitos:

      Exemplos de valores para propriedades:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      

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

Se o problema persistir mesmo depois de seguir as instruções acima, colete as seguintes informações: informações de diagnóstico e entre em contato com o suporte do Apigee Edge:

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 do ambiente
  • Pacote de proxy de API
  • Arquivo de rastreamento para as solicitações de API
  • 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
    

Referências