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 |
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 |
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 |
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:
- 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
comProxy refused to create tunnel with response status 403
.
Verifique se Mostrar todos os FlowInfos está ativado:
- Selecione uma das solicitações com falha e examine o trace.
- Navegar pelas diferentes fases do trace e localizar a falha o incidente.
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
- Navegue até a fase AX (dados do Analytics registrados) no trace e clique nela.
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:
Você vai encontrar os valores de X-Apigee-fault-code e X-Apigee-fault-source como
protocol.http.ProxyTunnelCreationFailed
etarget
, 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:
- 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. 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ó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 com503
: Se houver algum
503
erro no X-Apigee-fault-code correspondente ao valor deprotocol.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
- 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. - 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. - Nesse cenário, o código de status é
403
, que significa Forbidden. - 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.
- Analise as restrições de firewall e/ou ACL configuradas no servidor de back-end que pode impedir a criação do túnel.
- Dependendo do tipo de restrições de firewall e/ou ACL, é necessário corrigir o problema adequadamente.
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:
- Verifique se
faultstring
contémProxy refused to create tunnel with response status 403
usando o trace explicado em Etapas comuns de diagnóstico. - Navegue até a fase Fluxo de solicitação de destino iniciado e analise as Cabeçalhos de solicitação
- Verifique o valor do nome do host especificado no Cabeçalho do host no seção Cabeçalhos de solicitação.
- Se o cabeçalho Host tiver o nome do host de proxy, esse será o para este erro.
- 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.
- 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
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 erroProxy refused to create tunnel with response status 403
.
tcpdump
Para determinar o cabeçalho do host usando o tcpdump
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.- Analise os dados do
tcpdump
usando o a ferramenta Wireshark ou semelhante . Aqui está um exemplo de análise tcpdump usando o Wireshark:
- 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.
- No pacote 16, o processador de mensagens se conectou ao host do proxy
httpbin.org
(mostrado no exemplo acima). 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
- 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 erroProxy refused to create tunnel with response status 403
.
- Verifique se
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:
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>
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:
- Revise 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
- Revise o arquivo
É 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