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 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 este código de resposta:
HTTP/1.1 503 Service Unavailable
Além disso, talvez você veja a seguinte mensagem de erro:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Encaminhar proxy e encapsulamento
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 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
HTTPClient.use.tunneling
precisa ser definida como false
.
Código do erro: protocol.http.ProxyTunnelCreationFailed
O Apigee Edge retornará o código de erro protocol.http.ProxyTunnelCreationFailed
se o
servidor proxy não puder criar um túnel entre o Apigee Edge e o servidor de back-end devido a
problemas como firewall, restrições de lista de controle de acesso (ACL), 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 string com 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 em faultstring
:
String de falha | Descrição |
---|---|
O proxy foi recusado para criar um túnel com 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 de um túnel. |
O proxy foi recusado para criar um túnel com status de resposta 503 |
Isso pode acontecer devido a problemas de DNS, restrições de firewall, indisponibilidade do servidor de back-end que impedem a criação de uma extensão de |
O proxy foi recusado a criar um túnel com status de resposta 504 |
Isso pode acontecer quando há tempos limite durante a criação do túnel |
Dependendo do código de status observado em faultstring
, é necessário usar
técnicas adequadas para resolver o problema. Este manual explica como solucionar o problema se você observar o código de status 403
no faultstring
do código de erro protocol.http.ProxyTunnelCreationFailed
.
Causas possíveis
Este erro (código de status 403
) ocorre se houver alguma restrição de firewall ou ACL (lista de controle de acesso) configurada no servidor de back-end que impeça 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 foi recusado a criar um túnel com status de resposta 403 | O servidor proxy se recusa a criar o túnel porque recebe o nome de 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 do Edge |
Etapas comuns do diagnóstico
Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:
Ferramenta de rastreamento
Para diagnosticar o erro usando a ferramenta Trace:
- Ative a sessão de rastreamento e:
- Aguarde o erro ocorrer ou
- Se você conseguir reproduzir o problema, faça a chamada de API para reproduzir o problema
503 Service Unavailable
comProxy 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 rastro.
- Navegue pelas diferentes fases do rastro e localize onde a falha ocorreu.
Você verá o erro normalmente após a fase Iniciar o fluxo de solicitação de destino, conforme mostrado abaixo:
Observe as seguintes informações:
erro:
Proxy refused to create tunnel with response status 403
- Navegue até a fase AX (Dados do Analytics registrados) no rastreamento e clique nela.
Role para baixo até a seção Cabeçalhos de resposta Detalhes da fase e determine os valores de X-Apigee-fault-code e X-Apigee-fault-source, como mostrado abaixo:
Você verá os valores de X-Apigee-fault-code e X-Apigee-fault-source como
protocol.http.ProxyTunnelCreationFailed
etarget
, respectivamente, indicando que esse erro foi causado por uma falha na criação do túnel de proxy 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 os 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 os erros HTTP
503 Service Unavailable
. 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.
- Pesquise se há algum erro
503
com o códigoprotocol.http.ProxyTunnelCreationFailed
durante um período específico (se o problema aconteceu anteriormente) ou se ainda há alguma solicitação com falha com503
. Se você encontrar erros
503
com o X-Apigee-fault-code que corresponda ao valor deprotocol.http.ProxyTunnelCreationFailed
, determine o valor de X-Apigee-fault-source.Exemplo de erro 503 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-source:
Cabeçalhos de resposta Valor X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
Causa: o proxy foi recusado para criar um túnel com status de resposta 403
Diagnóstico
- Determine o código de falha e a origem da falha do
503 Service Unavailable
usando a Ferramenta de rastreamento ou os registros de acesso do NGINX, conforme explicado nas Etapas comuns de diagnóstico. - Analise a Mensagem de erro e determine o código de status indicado no
faultstring
em busca de 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 normalmente acontece quando há restrições de firewall ou lista de controle de acesso (ACL, na sigla em inglês) que impeçam a criação do túnel.
- Revise as restrições de firewall e/ou ACLs configuradas no servidor de back-end que possam impedir a criação do túnel.
- Dependendo do tipo de restrições de firewall e/ou ACL, é necessário corrigir o problema adequadamente.
Vejamos um exemplo de restrição de firewall para explicar como solucionar 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
É possível 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
faultstring
contémProxy refused to create tunnel with response status 403
usando rastros, conforme explicado em Etapas comuns de diagnóstico. - Navegue para a fase Fluxo de solicitação de destino iniciado e revise os Cabeçalhos de solicitação.
- Verifique o valor do nome do host especificado em Host header na seção Request Headers.
- Se o cabeçalho Host contiver o nome do host de 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.
- 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 rastro mostrando o cabeçalho do host com o nome do host do proxy
No exemplo de rastreamento mostrado acima, ele mostra que o Host Header contém o nome do host 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 esteja contido no Host Header, o erroProxy refused to create tunnel with response status 403
.
tcpdump
Para determinar o cabeçalho do host usando o tcpdump
Capture um
tcpdump
no servidor proxy para as solicitações provenientes do componente de 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 de
tcpdump
usando a ferramenta Wireshark ou uma ferramenta semelhante. Veja 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 a conexão com o servidor proxy por meio de um processo de handshake de TCP de três vias.
- No pacote 16, o processador de mensagens se conectou ao host de proxy
httpbin.org
(mostrado no exemplo acima). Selecione o pacote 16 e examine o conteúdo dele em detalhes, mais especificamente o Cabeçalho do host que está sendo transmitido para o servidor proxy pelo processador de mensagens.
- 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 criar o túnel com o servidor de back-end transmitindo o Cabeçalho do hosthttpin.org
acima, ele falha com o erroProxy refused to create tunnel with response status 403
.
- Verifique se
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 determinado que esse erro é causado porque o firewall no servidor de back-end está configurado de forma que espera que o Cabeçalho do host sempre contenha o nome do host do servidor de backend enquanto o processador de mensagens envia o nome do host do backend, execute as etapas a seguir para resolver o problema:
Defina a propriedade
use.proxy.host.header.with.target.uri
como 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:
- Consulte o arquivo
/opt/apigee/customer/application/message-processor.properties
em cada um dos processadores de mensagens. 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
- Consulte o arquivo
É necessário coletar informações de diagnóstico
Se o problema persistir mesmo depois de seguir as instruções acima, 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 privada, forneça as seguintes informações:
- Concluir a mensagem de erro observada para as solicitações com falha
- Nome do ambiente
- Pacote de proxy de API
- Arquivo de rastreamento das 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