排查 Azure 中虚拟机上的应用程序连接问题

无法启动或连接到在 Azure 虚拟机上运行的应用程序 (VM) 有多种原因。 原因包括应用程序未运行或未侦听预期端口、侦听端口被阻止或网络规则未正确将流量传递到应用程序。 本文介绍查找和更正问题的有条不紊的方法。

如果在使用 RDP 或 SSH 连接到 VM 时遇到问题,请先参阅以下文章之一:

如果在本文的任何时候需要更多帮助,可以在 MSDN Azure 和 Stack Overflow 论坛上联系 Azure 专家。 或者,还可以提交Azure 支持事件。 转到Azure 支持站点,然后选择“获取支持”。

快速入门故障排除步骤

如果在连接到应用程序时遇到问题,请尝试以下常规故障排除步骤。 完成每个步骤后,再次尝试连接到应用程序:

有关详细信息,请参阅 排查终结点连接 (RDP/SSH/HTTP 等故障)

详细的故障排除概述

对 Azure 虚拟机上运行的应用程序的访问进行故障排除主要有四个方面。

图中显示了两台客户端设备分别通过 Internet 和 VPN 连接到 V M 上的应用程序。突出显示了对访问进行故障排除的 4 个主要方面。

  1. 在 Azure 虚拟机上运行的应用程序。
    • 应用程序本身是否正常运行?
  2. Azure 虚拟机。
    • VM 本身是否正常运行并响应请求?
  3. Azure 网络终结点。
    • 经典部署模型中虚拟机的云服务终结点。
    • 资源管理器部署模型中虚拟机的网络安全组和入站 NAT 规则。
    • 流量是否可以从用户流向预期端口上的 VM/应用程序?
  4. Internet 边缘设备。
    • 防火墙规则是否已到位,以防止流量正确流动?

对于通过站点到站点 VPN 或 ExpressRoute 连接访问应用程序的客户端计算机,可能导致问题的主要区域是应用程序和 Azure 虚拟机。

若要确定问题的根源及其更正,请执行以下步骤。

步骤 1:从目标 VM 访问应用程序

尝试从运行该应用程序的 VM 使用相应的客户端程序访问应用程序。 使用本地主机名、本地 IP 地址或环回地址 (127.0.0.1) 。

直接从 Azure VNet 中的 V M 访问应用程序的示意图。

例如,如果应用程序是 Web 服务器,请在 VM 上打开浏览器,并尝试访问 VM 上托管的网页。

如果可以访问应用程序,请转到 步骤 2

如果无法访问应用程序,请验证以下设置:

  • 应用程序在目标虚拟机上运行。
  • 应用程序正在侦听预期的 TCP 和 UDP 端口。

在基于 Windows 和 Linux 的虚拟机上,使用 netstat -a 命令显示活动侦听端口。 检查应用程序应侦听的预期端口的输出。 重启应用程序或将其配置为根据需要使用预期的端口,然后再次尝试在本地访问应用程序。

步骤 2:从同一虚拟网络中的另一个 VM 访问应用程序

尝试使用 VM 的主机名或其 Azure 分配的公共、专用或提供程序 IP 地址,从其他 VM 访问应用程序,但位于同一虚拟网络中。 对于使用经典部署模型创建的虚拟机,请勿使用云服务的公共 IP 地址。

从 Azure VNet 中同一虚拟网络中的另一个 V M 直接访问应用程序的关系图。

例如,如果应用程序是 Web 服务器,请尝试从同一虚拟网络中不同 VM 上的浏览器访问网页。

如果可以访问应用程序,请转到 步骤 3

如果无法访问应用程序,请验证以下设置:

在基于 Windows 的虚拟机上,使用具有高级安全性的 Windows 防火墙来确定防火墙规则是否排除应用程序的入站和出站流量。

步骤 3:从虚拟网络外部访问应用程序

尝试从虚拟网络外部的计算机访问应用程序,作为运行应用程序的 VM。 使用其他网络作为原始客户端计算机。

从虚拟网络外部的计算机访问应用程序的示意图。

例如,如果应用程序是 Web 服务器,请尝试从不在虚拟网络中的计算机上运行的浏览器访问网页。

如果无法访问应用程序,请验证以下设置:

  • 对于使用经典部署模型创建的 VM:

    • 验证 VM 的终结点配置是否允许传入流量,尤其是协议 (TCP 或 UDP) 以及公共和专用端口号。
    • 验证终结点上) (ACL 的访问控制列表是否未阻止来自 Internet 的传入流量。
    • 有关详细信息,请参阅 如何设置虚拟机的终结点
  • 对于使用资源管理器部署模型创建的 VM:

    • 验证 VM 的入站 NAT 规则配置是否允许传入流量,尤其是 (TCP 或 UDP) 以及公共和专用端口号的协议。
    • 验证网络安全组是否允许入站请求和出站响应流量。
    • 有关详细信息,请参阅 什么是网络安全组?

如果虚拟机或终结点是负载均衡集的成员:

  • 验证探测协议 (TCP 或 UDP) 和端口号是否正确。
  • 如果探测协议和端口不同于负载均衡集协议和端口:
    • 验证应用程序是否侦听探测协议 (TCP 或 UDP) ,端口号 (目标 VM 上的 netstat -a) 。
    • 验证目标 VM 上的主机防火墙是否允许入站探测请求和出站探测响应流量。

如果可以访问应用程序,请确保 Internet 边缘设备允许:

  • 出站应用程序请求从客户端计算机到 Azure 虚拟机的流量。
  • 来自 Azure 虚拟机的入站应用程序响应流量。

步骤 4 如果无法访问应用程序,请使用 IP 验证检查设置

有关详细信息,请参阅 Azure 网络监视概述

其他资源

排查与基于 Windows 的 Azure 虚拟机的远程桌面连接问题

排查与基于 Linux 的 Azure 虚拟机 (SSH) 连接的安全外壳问题

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 社区支持提交产品反馈。