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 503 Service Unavailable com o código de erro protocol.http.ProxyTunnelCreationFailed como 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ê pode observar 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 meio de um servidor proxy, conforme explicado em
Configurar proxy de encaminhamento. O servidor proxy abre uma conexão segura (HTTPS) ou não segura
(HTTP) com o servidor de back-end, dependendo do tipo de proxy (indicado
pela propriedade HTTPClient.proxy.type) usado e transfere os dados
nas duas direções. Isso é conhecido como tunelamento.
Por padrão, o Apigee Edge usa tunelamento para todo o tráfego. Para desativar o tunelamento, a propriedade
HTTPClient.use.tunneling precisa ser definida como false.
Código de erro: protocol.http.ProxyTunnelCreationFailed
O Apigee Edge retorna o código de erro protocol.http.ProxyTunnelCreationFailed se o
servidor proxy não conseguir criar um túnel entre o Apigee Edge e o servidor de back-end devido a
problemas como firewall, restrições de ACL (lista de controle de acesso), problemas de DNS, indisponibilidade do servidor de back-end,
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 faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
Possíveis causas de alguns dos códigos de status observados na faultstring:
A tabela a seguir descreve as possíveis causas, dependendo do código de status indicado na
faultstring:
| Faultstring | Descrição |
|---|---|
O proxy se recusou a criar um túnel com o status de resposta 403 |
Isso pode acontecer devido a restrições de firewall ou ACL configuradas no servidor de back-end que impedem a criação do túnel. |
O proxy se recusou a criar um túnel com o status de resposta 503 |
Isso pode acontecer devido a problemas de DNS, restrições de firewall, indisponibilidade do servidor de back-end que impede a criação do túnel |
| O proxy se recusou a criar um túnel com o status de resposta 504 |
Isso pode acontecer se houver tempos limite durante a criação do túnel |
Dependendo do código de status observado na faultstring, é necessário usar
técnicas adequadas para resolver o problema. Este manual explica como resolver
o problema se você observar o código de status 403 na faultstring
para o código de erro protocol.http.ProxyTunnelCreationFailed.
Causas possíveis
Esse erro (código de status 403) ocorre se houver restrições de firewall ou ACL (lista de controle de acesso) configuradas no servidor de back-end que impedem a criação do túnel 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 |
|---|---|---|
| O proxy se recusou a criar um túnel com o 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. |
Somente usuários da nuvem privada do Edge |
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:
- Ative a sessão de trace e
- 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 UnavailablecomProxy refused to create tunnel with response status 403.
Verifique se a opção Mostrar todos os FlowInfos está ativada:
- Selecione uma das solicitações com falha e examine o trace.
- Navegue pelas diferentes fases do trace e localize onde a falha ocorreu.
O erro geralmente aparece após a fase Fluxo de solicitação de destino iniciado , conforme mostrado abaixo:
Anote as seguintes informações:
Erro:
Proxy refused to create tunnel with response status 403- Navegue até a fase AX (dados de análise registrados) no trace e clique nela.
Role para baixo até a seção Detalhes da fase Cabeçalhos de resposta e determine os valores de X-Apigee-fault-code e X-Apigee-fault-source , conforme mostrado abaixo:
Você verá os valores de X-Apigee-fault-code e X-Apigee-fault-source como
protocol.http.ProxyTunnelCreationFailedetarget, respectivamente, indicando que esse erro é causado porque a criação do túnel de proxy falhou, já que o cabeçalho de host esperado não foi recebido.Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
Para diagnosticar o erro usando registros de acesso do NGINX:
- Se você for um usuário da nuvem privada, poderá usar os registros de acesso do NGINX para
determinar as principais informações sobre erros HTTP
503 Service Unavailable. Verifique os registros de acesso do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logEm que: ORG, ORG e PORT# são substituídos por valores reais.
- Pesquise para ver se há erros
503com o código de erroprotocol.http.ProxyTunnelCreationFaileddurante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha com503. Se você encontrar erros
503com o X-Apigee-fault-code correspondente ao valor deprotocol.http.ProxyTunnelCreationFailed, então determine o valor de X-Apigee-fault-source.Exemplo de erro 503 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 resposta Valor X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
Causa: o proxy se recusou a criar um túnel com o status de resposta 403
Diagnóstico
- Determine o código de falha e a origem da falha para
503 Service Unavailableusando a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns do diagnóstico. - Analise a mensagem de erro e determine o código de status
indicado na
faultstringpara falha na criação do túnel. - Nesse cenário, o código de status é
403, o que significa Proibido. - Isso significa que não há direitos ou privilégios suficientes para criar o túnel. Isso pode acontecer normalmente se houver restrições de firewall ou ACL (lista de controle de acesso) que impeçam a criação do túnel.
- Analise as restrições de firewall e/ou ACL configuradas no servidor de back-end que podem impedir a criação do túnel.
- Dependendo do tipo de restrições de firewall e/ou ACL, é necessário corrigir o problema de maneira adequada.
Vamos usar um exemplo de restrição de firewall para explicar como solucionar e resolver esse problema:
Cenário: a restrição de firewall no servidor de back-end espera que o cabeçalho do host sempre contenha o nome do host do servidor de back-end
Você pode usar uma das seguintes maneiras para determinar o cabeçalho do host transmitido pelo Apigee Edge:
Trace
Para determinar o cabeçalho do host usando o Trace:
- Verifique se o
faultstringcontémProxy refused to create tunnel with response status 403usando o trace, conforme explicado em Etapas comuns do diagnóstico. - Navegue até a fase Fluxo de solicitação de destino iniciado e analise os cabeçalhos de solicitação
- Verifique o valor do nome do host especificado no cabeçalho do host na seção Cabeçalhos de solicitação.
- Se o cabeçalho Host contiver o nome do host do proxy, essa será a causa do erro.
- Isso ocorre porque o firewall está configurado no servidor de back-end para aceitar as solicitações somente se o cabeçalho do host contiver o nome do servidor de back-end.
- Assim, 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
No exemplo de trace mostrado acima, mostra que o cabeçalho do host contém o nome do host do proxy
www.proxyserver.com.Como há uma restrição de firewall configurada no servidor de back-end que espera que apenas o nome do host do servidor de back-end seja contido no cabeçalho do host, você recebe o erroProxy refused to create tunnel with response status 403.
tcpdump
Para determinar o cabeçalho do host usando o tcpdump
Capture um
tcpdumpno servidor proxy para as solicitações provenientes do componente do 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.- Analise os dados
tcpdumpusando a ferramenta Wireshark ou uma ferramenta semelhante. Confira um exemplo de análise do tcpdump usando o Wireshark:
- Os números de pacote 13, 14 e 15 mostram que o processador de mensagens está estabelecendo conexão com o servidor proxy por meio de um processo de handshake TCP de três vias.
- No pacote 16, o processador de mensagens se conectou ao host do proxy
httpbin.org(mostrado no exemplo acima). Selecione o pacote 16 e examine o conteúdo do pacote em detalhes e, especificamente, o cabeçalho do host transmitido ao servidor proxy pelo processador de mensagens.
- O exemplo acima mostra cabeçalho do host
httpin.org, que é o nome do host do servidor proxy. Portanto, quando o servidor proxy tenta criar o túnel com o servidor de back-end transmitindo o cabeçalho do hosthttpin.org, ele falha com o erroProxy refused to create tunnel with response status 403.
- Verifique se o
Resolução
Cenário: a restrição de firewall no servidor proxy espera que o cabeçalho do host sempre contenha o nome do host do servidor de back-end
Se você tiver verificado que esse erro é causado porque o firewall no servidor de back-end está configurado de modo que espera que o cabeçalho do host sempre contenha o nome do host do servidor de back-end, enquanto o processador de mensagens está enviando o nome do host do servidor proxy, siga estas etapas para resolver o problema:
Defina a propriedade
use.proxy.host.header.with.target.uricomo verdadeira no TargetEndpoint, conforme mostrado no exemplo a seguir: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>Verifique se as outras propriedades relacionadas ao proxy de encaminhamento estão configuradas no processador de mensagens da seguinte maneira:
- Analise o arquivo
/opt/apigee/customer/application/message-processor.propertiesem cada um dos processadores de mensagens. Verifique se as seguintes propriedades estão definidas de acordo com seu caso de uso ou requisitos:
Exemplo 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
- Analise o arquivo
É necessário coletar informações de diagnóstico
Se o problema persistir mesmo depois de seguir as instruções acima, 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 privada, forneça as seguintes informações:
- Mensagem de erro completa observada para as solicitações com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de trace para as solicitações de API
Registros de acesso do NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logEm 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