【问题标题】:Why Azure VM is not receiving a HTTP GET response?为什么 Azure VM 没有收到 HTTP GET 响应?
【发布时间】:2021-09-03 08:00:07
【问题描述】:

我在尝试从 Azure VM 发出 HTTP 请求时遇到了一个有趣的问题。看来,当从该 VM 运行请求时,响应永远不会到达。我尝试使用发出 HTTP 请求和 Postman 的自定义 C# 代码。在这两种情况下,我们都可以在目标 API 端的日志中看到已发送响应,但在源 VM 上未收到任何数据。完全相同的 C# 请求和 Postman 请求在此 VM 之外的多个网络和机器中工作。 在 VM 端实际适用于此请求的唯一工具是 Curl Bash 终端,但根据当前要求,它不是一个选项。

在 Windows 10 和 Windows Server 2019 上尝试了多种 Azure VM 大小。

目标 API 是本地托管的,大约需要 5 分钟才能将数据发回。有效负载非常小,但由于在 API 端执行的计算需要一段时间才能生成。修改此 API 不是一种选择。

所以要清楚 - 请求永远卡住,直到达到客户端超时(如果已配置)。有人知道这可能是什么原因吗?

【问题讨论】:

  • 当网络路由将返回数据包定向到另一条路由然后到达防火墙时,我观察到这些行为 - 您可以从 VM 授权 443 上的 https 但然后看不到响应让它回来,因为它遍历与出站不同的网络路由。恐怕我不是专家,无法确切建议要查找的内容,但网络路由可能是一个查询线。
  • @TomW 感谢您的建议,我尝试为测试启用所有端口,但没有帮助。有趣的是,对同一 API 进行不同的 get 操作也可以正常工作,正是这个特定的操作会导致问题(但它也是迄今为止标准场景中运行时间最长的操作)。这也让我感到困惑,curl bash 如何每次都能做到 100% 正确。

标签: azure http curl postman azure-virtual-machine


【解决方案1】:

如果这些传输时间超过 4 分钟而没有保持活动状态,Azure 通常会关闭连接。

你应该可以通过使用wireshark监控连接来看到这一点。

TCP Timeouts can be configured when using a Load Balancer,但如果可能,您也可以尝试在 API 服务器中添加保持活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多