<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
问题
客户端应用收到 HTTP 状态代码 502 Bad Gateway
以及
代码 ECONNRESET
作为 Edge Microgateway 中的 API 调用响应。
错误消息
客户端将看到以下响应代码:
HTTP/1.1 502 Bad Gateway
响应将包含以下错误消息:
{"message":"socket hang up","code":"ECONNRESET"}
可能的原因
原因 | 说明 | 适用的问题排查说明 |
---|---|---|
保持连接超时配置不正确 | Edge Microgateway 和目标服务器之间的 keep-alive 超时配置不正确。 | Edge 公有云和私有云用户 |
目标服务器过早关闭连接 | 当 Edge Microgateway 发送邮件时,目标服务器过早关闭连接 请求载荷。 | Edge 公有云和私有云用户 |
常见诊断步骤
- 查看 Edge Microgateway 日志:
/var/tmp/edgemicro-`hostname`-*.log
- 搜索是否有任何代码为
ECONNRESET
的502
错误 在特定时间段内(如果问题在过去发生过)或者是否有任何请求 仍然失败并显示502
。2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- 如果将日志记录级别设置为
warn
或info
,则系统还会 是包含目标服务器主机名和端口的[warn]
消息 元素。在此示例中,它是X.X.X.X:8080
,可用于 以便捕获tcpdump
。2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- 错误代码
[socket hang up][ECONNRESET]
表示目标服务器 已关闭与 Edge Microgateway 的连接。您可以在日志中搜索 其发生频率。
原因:保持连接超时配置不正确
<ph type="x-smartling-placeholder">诊断
使用 tcpdump
- 捕获 Edge Microgateway 和 上的后端服务器之间的
tcpdump
使用以下命令连接到 Edge Microgateway 主机操作系统:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- 分析捕获的
tcpdump
:tcpdump 输出结果示例: ( 查看大图)
在上面的
tcpdump
示例中,您可以看到以下内容:- 在数据包 250288 中,客户端发送
POST
请求。 - 在数据包 250371 中,服务器会返回
200 OK
。 - 在数据包 250559 中,客户端发送
ACK.
- 在数据包 250560 中,服务器将
Continuation
消息。 - 在数据包 250561 中,客户端发送
ACK.
- 在数据包 262436 中,服务器将
FIN, ACK
发送到 客户端发起连接关闭的请求。请注意,这大约是 秒 (250561)。 - 在数据包 262441 中,客户端发送另一个
POST
请求。但是,此操作失败,因为服务器已经启动了关闭 连接。它会在数据包中返回RST
262441。
在本例中,同一连接至少成功重复使用了 1 次,但 服务器将在五秒后关闭连接 空闲时间,该时间恰好与客户端发送新请求的时间相同。这个 表明后端服务器 keep-alive 超时很有可能短于或等于 客户端中设置的值如需验证这一点,请参阅 比较 Edge Microgateway 和后端服务器上的 keep-alive 超时。
- 在数据包 250288 中,客户端发送
比较 keep-alive 超时
- Edge Microgateway 没有特定的 keep-alive 超时属性。时间是 由运行应用的操作系统决定。常见示例包括:Windows、 Linux 和 Docker 容器
- 这有可能是在操作系统中自定义的。请与您的 系统管理员。默认情况下,Linux 操作系统有一个默认的 keep-alive 超时 2 小时
- 接下来,请检查后端服务器上配置的 keep-alive 超时属性。让我们 假设您的后端服务器配置为 10 秒的值。
- 如果您确定操作系统上的 keep-alive 超时值
高于后端服务器上 keep-alive 超时属性的值,如
那么这就是导致
502
错误的原因。
分辨率
在 Edge 所在的操作系统上,确保 keep-alive 超时属性始终较低 与后端服务器上的相比,Microgateway 正在运行。
- 确定为后端服务器上的 keep-alive 超时设置的值。
- 在操作 系统进行监控,以使 keep-alive 超时属性低于后端设置的值 执行适用于您操作系统的步骤。
最佳做法
强烈建议下游组件始终具有较短的 keep-alive 超时值
高于上游服务器上配置的阈值,以避免这些类型的竞态条件和
502
个错误。每个下游跃点应低于每个上游跃点。边缘
Microgateway,最好遵循以下准则:
客户端应用或负载平衡器的 keep-alive 超时应小于 Edge Microgateway keep-alive 超时。
要在 Edge Microgateway 上配置 keep-alive 超时,请将
keep_alive_timeout
的价值~/.edgemicro/org-env-config.yaml
文件。edgemicro: keep_alive_timeout: 65000
<ph type="x-smartling-placeholder">- Edge Microgateway 操作系统 keep-alive 超时应小于目标 服务器 keep-alive 超时
- 如果 Edge Microgateway 之前或之后有任何其他跃点,则同一规则应 。您应始终让下游客户端关闭 与上游的连接
原因:目标服务器过早关闭连接
<ph type="x-smartling-placeholder">诊断
- 请按照常见诊断步骤中的步骤操作,验证您是否
收到了
[socket hang up][ECONNRESET]
错误。 - 如果是,请在
tcpdump
的帮助下进一步调查(如下所述)。错误消息
[targetRequest error][GET][][socket hang up][ECONNRESET]
表示使用 Edge Microgateway 时出现此错误 将请求发送到后端(目标)服务器。也就是说,Edge Microgateway 将 API 请求,并等待响应。但后端 服务器在 Edge Microgateway 收到响应前突然终止了连接。 - 检查后端服务器日志,看看是否存在 导致后端服务器突然终止连接。如果您发现任何错误或 信息,然后转到解决页面并适当解决问题 。
- 如果您没有在后端服务器中找到任何错误或信息,请收集
Edge Microgateway 服务器上的
tcpdump
输出:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- 分析捕获的
tcpdump
:tcpdump 输出结果示例: ( 查看大图)
在上面的
tcpdump
示例中,您可以看到以下内容:- 在数据包 4 中,Edge Microgateway 向目标发送了
GET
请求 服务器。 - 在数据包 5 中,目标服务器使用
ACK
做出响应,以确认 请求。 - 但是,在数据包 6 中,目标不是使用响应载荷进行响应,而是
服务器发送
FIN, ACK
以关闭连接。 - 在数据包 7 和更高中,连接会相互关闭。由于该连接
关闭,Edge Microgateway 将返回 HTTP
502
将错误返回给客户端 - 请注意,数据包 8 的时间戳
2021-06-23T03:52:24.110Z
对应于在 Edge Microgateway 中记录错误的时间戳 日志。日志文件和tcpdump
中的时间戳通常可以 用于将错误与实际数据包相关联。
分辨率
适当修正后端服务器上的问题。
如果问题仍然存在,您需要有关问题排查方面的帮助
502 Bad Gateway Error
或者,如果您怀疑是 Edge Microgateway 存在问题,请前往 必须收集诊断信息。必须收集的诊断信息
按照上述说明操作后,如果问题依然存在,请收集以下内容 然后联系 Apigee Edge 支持团队:
- 日志文件:默认文件夹是
/var/tmp
,但该文件夹可能会被覆盖 在主config.yaml
文件 (logging > dir parameter
) 中。时间是 建议先将log > level
更改为info
,然后再提供 并将日志文件发送给 Apigee 支持团队。 - 配置文件:Edge Microgateway 的主要配置位于
YAML 文件位于默认的 Edge Microgateway 文件夹
$HOME/.edgemicro
中。这里有 名为default.yaml
的默认配置文件,然后为每个环境分别创建一个配置文件ORG-ENV-config.yaml
。请上传此文件 受影响的组织和环境。
- 在数据包 4 中,Edge Microgateway 向目标发送了