<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
问题
客户端应用将收到带有 503 Service Unavailable
的 HTTP 状态代码,
错误代码 protocol.http.ProxyTunnelCreationFailed
作为 API 调用的响应。
错误消息
客户端应用将获得以下响应代码:
HTTP/1.1 503 Service Unavailable
此外,您可能还会看到以下错误消息:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
转发代理和隧道
Apigee Edge 允许您的 API 代理通过代理与后端服务器通信
如
<ph type="x-smartling-placeholder"></ph>
配置转发代理。代理服务器会打开安全 (HTTPS) 或非安全
与后端服务器的 (HTTP) 连接,具体取决于代理类型(指示的代理类型)
(由 HTTPClient.proxy.type
属性指定),并传输数据
两个方向。这称为隧道技术。
默认情况下,Apigee Edge 对所有流量使用隧道。要停用隧道技术
HTTPClient.use.tunneling
需要设置为 false
。
错误代码:protocol.http.ProxyTunnelCreationFailed
如果存在以下情况,Apigee Edge 会返回错误代码 protocol.http.ProxyTunnelCreationFailed
:
由于任何原因,代理服务器无法在 Apigee Edge 和后端服务器之间创建隧道,
防火墙、ACL(访问控制列表)限制、DNS 问题、后端服务器等问题
不可用性、超时等
通常情况下,Apigee Edge 所返回响应的 faultstring
中的状态代码
指示导致此错误的高级别原因。
错误字符串模板:
Proxy refused to create tunnel with response status STATUS_CODE
导致在错误字符串中观察到的某些状态代码的可能原因:
下表根据
faultstring
:
故障字符串 | 说明 |
---|---|
代理拒绝创建响应状态为“403 ”的隧道 |
这可能是由于在 Gmail 上配置了防火墙或 ACL 限制 阻止创建隧道的后端服务器。 |
代理拒绝创建响应状态为“503 ”的隧道 |
这可能是由于 DNS 问题、防火墙限制、后端服务器 不可用,这导致无法创建隧道 |
代理拒绝创建响应状态为 504 的隧道 |
如果创建隧道期间出现超时,则可能会发生这种情况 |
根据在 faultstring
中观察到的状态代码,您需要使用
来排查问题。本指南介绍了如何排查
如果您在 faultstring
中看到状态代码 403
,就会发现相应问题
错误代码 protocol.http.ProxyTunnelCreationFailed
。
可能的原因
如果存在任何防火墙或 ACL(访问403
控制列表)的限制,以阻止隧道被
由代理服务器在 Apigee Edge 和后端服务器之间创建。
原因 | 说明 | 适用的问题排查说明 |
---|---|---|
代理拒绝创建响应状态为 403 的隧道 | 代理服务器收到代理服务器主机名后拒绝创建隧道
而不是 Host 标头中的后端服务器主机名。 |
仅面向 Edge Private Cloud 用户 |
常见诊断步骤
使用以下工具/技术之一来诊断此错误:
跟踪工具
如需使用跟踪工具诊断错误,请执行以下操作:
- 启用跟踪会话并
您可以:
<ph type="x-smartling-placeholder">
- </ph>
- 等待错误发生,或者
- 如果您可以重现问题,请进行 API 调用以重现问题
503 Service Unavailable
使用Proxy refused to create tunnel with response status 403
。
确保已启用 Show all FlowInfos:
- 选择其中一个失败请求并检查跟踪记录。
- 浏览跟踪记录的不同阶段并找到失败之处 错误。
通常在“目标请求流程已开始”阶段之后,您通常会看到该错误 如下所示:
请注意以下信息:
错误:
Proxy refused to create tunnel with response status 403
- 进入跟踪记录中的 AX(记录的 Google Analytics 数据)阶段,然后点击该阶段。
向下滚动到阶段详情 响应标头部分,然后 确定 X-Apigee-fault-code 和 X-Apigee-fault-source 的值,如下所示 如下所示:
( 查看大图)
( 查看大图)
您将看到 X-Apigee-fault-code 和 X-Apigee-fault-source 的值 (分别显示为
protocol.http.ProxyTunnelCreationFailed
和target
),这表明此错误是因为代理隧道 创建失败,因为未收到预期的主机标头。响应标头 值 X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
<ph type="x-smartling-placeholder">如需使用 NGINX 访问日志诊断错误,请执行以下操作:
- 如果您是 Private Cloud 用户,则可以使用 NGINX 访问日志
确定有关 HTTP
503 Service Unavailable
的关键信息 错误。 查看 NGINX 访问日志:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
其中:ORG、ORG 和 PORT# 替换为实际值。
- 搜索是否存在任何带有错误代码的
503
错误protocol.http.ProxyTunnelCreationFailed
(如果 过去出现的问题),或者是否有任何请求仍以失败告终,503
。 如果您发现
503
X-Apigee-fault-code 存在任何错误, 与protocol.http.ProxyTunnelCreationFailed
的值匹配, 然后确定 X-Apigee-fault-source.NGINX 访问日志中的 503 错误示例:
以上 NGINX 访问日志中的示例条目包含 X- Apigee-fault-code 和 X-Apigee-fault-source:
响应标头 值 X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
原因:代理拒绝创建响应状态为 403 的隧道
<ph type="x-smartling-placeholder">诊断
- 使用跟踪工具或 NGINX 访问日志确定
503 Service Unavailable
的错误代码和错误来源(如 常见的诊断步骤。 - 查看错误消息并确定状态代码
faultstring
中指明的隧道创建失败。 - 在这种情况下,状态代码为
403
,表示禁止。 - 这意味着没有足够的权限来创建隧道。这可能会造成 如果存在任何防火墙或 ACL(访问控制列表)限制, 阻止创建隧道
- 检查后端服务器上已配置的所有防火墙和/或 ACL 限制, 可能会阻止创建隧道
- 根据防火墙和/或 ACL 限制的类型,您需要修复相应问题 。
我们以防火墙限制为例来说明如何排查和解决此问题 问题:
场景:后端服务器上的防火墙限制要求主机标头应始终 包含后端服务器主机名
您可以使用以下方法之一来确定 Apigee Edge 传递的主机标头:
Trace
要使用跟踪确定主机标头,请执行以下操作:
- 使用跟踪记录确定
faultstring
包含Proxy refused to create tunnel with response status 403
,如 常见的诊断步骤。 - 进入目标请求流程已开始 阶段,并查看 请求标头
- 在 Host 标头 Request Headers 部分同步。
- 如果主机标头包含代理主机名,则这是 导致这一错误的原因。
- 这是因为后端服务器上的防火墙已配置为接受 仅当主机标头包含后端服务器名称时,才发送您的请求。
- 因此,当代理服务器尝试创建与后端服务器的隧道时,
失败并显示以下错误
Proxy refused to create tunnel with response status 403
。显示主机标头具有代理主机名的跟踪记录示例
( 查看大图)
在上面显示的示例跟踪记录中,它显示 Host Header 包含 代理主机的名称
www.proxyserver.com.
由于存在 在后端服务器上配置的防火墙限制 错误Proxy refused to create tunnel with response status 403
。
tcpdump
要使用 tcpdump 确定主机标头
在代理服务器上捕获来自以下请求的
tcpdump
: 使用如下命令创建 Apigee Edge 的消息处理器组件:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
如需详细了解如何使用
tcpdump
命令,请参阅 <ph type="x-smartling-placeholder"></ph> tcpdump.- 使用
tcpdump
Wireshark 工具或类似工具 工具。 以下是对 <ph type="x-smartling-placeholder"></ph> tcpdump:
( 查看大图)
- 数据包编号 13、14 和 15 表明邮件 处理器正在通过三向 TCP 协议与代理服务器建立连接 握手过程。
- 在数据包 16 中,消息处理器已连接到代理主机
httpbin.org
(如上例所示)。 选择数据包 16 并详细检查数据包的内容 具体来说就是邮件传递给代理服务器的主机标头 处理器。
- 上面的示例展示了 Host Header
httpin.org
, 是代理服务器的主机名。因此,当代理服务器尝试 通过传递上述主机标头来创建与后端服务器的隧道httpin.org
,则测试会失败,并显示错误Proxy refused to create tunnel with response status 403
。
- 使用跟踪记录确定
分辨率
场景:对代理服务器的防火墙限制要求主机标头应该 始终包含后端服务器主机名
如果您已经确定了此错误是因为后端服务器上的防火墙 配置为“主机标头”应始终包含“后端”服务器 主机名,同时邮件处理器发送代理服务器主机名,然后执行 请按照以下步骤解决此问题:
在
use.proxy.host.header.with.target.uri
TargetEndpoint,如以下示例所示: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>
<ph type="x-smartling-placeholder">确保与 <ph type="x-smartling-placeholder"></ph> 转发代理在消息处理器上配置,如下所示:
- 查看每个消息处理器上的
/opt/apigee/customer/application/message-processor.properties
文件。 确保根据您的用例或要求设置以下属性:
属性的示例值:
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
<ph type="x-smartling-placeholder">
- 查看每个消息处理器上的
必须收集的诊断信息
按照上述说明操作后,如果问题依然存在,请收集以下内容 然后联系 Apigee Edge 支持团队:
如果您是 Private Cloud 用户,请提供以下信息:
- 观察到失败请求的完整错误消息
- 环境名称
- API 代理软件包
- API 请求的跟踪文件
NGINX 访问日志
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
其中:ORG、ENV 和 PORT# 替换为实际值。
消息处理器系统日志
/opt/apigee/var/log/edge-message-processor/logs/system.log
参考
- <ph type="x-smartling-placeholder"></ph> 配置转发代理
- <ph type="x-smartling-placeholder"></ph> SSL 隧道