文档首页/ 弹性云服务器 ECS/ 故障排除/ 高频故障案例/ 云服务器端口不通怎样排查?
更新时间:2023-04-03 GMT+08:00

云服务器端口不通怎样排查?

操作场景

如果网站直接无法访问,可能是由于安全组没有放行网站或者远程连接工具使用的端口。

本节操作以80端口为例介绍排查云服务器端口不通问题的操作步骤。

问题定位步骤

如果实例无法对外提供HTTP服务,可以按以下思路检查Web服务相关的接口(默认为TCP 80)是否正常工作。

  1. 在ECS管理控制台,确认安全组已经放行该端口。
  2. 远程连接ECS实例,确认服务已经开启。
  3. 确认端口正常被监听。如没有,请修改监听地址。
  4. 确认实例防火墙已经放行服务。

Windows操作系统

以下操作以Windows 2012操作系统云服务器,安装了IIS服务为例。

  1. 确认安全组已经放行80端口。

    1. 登录管理控制台。
    2. 单击管理控制台左上角的,选择区域和项目。
    3. 选择“计算 > 弹性云服务器”。
    4. 在弹性云服务器列表,单击待变更安全组规则的弹性云服务器名称。

      系统跳转至该弹性云服务器详情页面。

    5. 选择“安全组”页签,并单击,查看安全组规则。
    6. 确保云服务器所在的安全组已添加如下安全组规则。

  2. 远程登录云服务器,确认服务已经开启。

    1. 在“服务器管理器”窗口,单击“工具 > Internet Information Services (IIS) 管理器”。

      如果找不到这个选项,则说明没有成功安装IIS服务,需要重新安装IIS服务。

    2. 在Internet Information Services (IIS) 管理器窗口中确认以下信息。
      • 在“连接”导航栏里,右键单击实例ID,如果“启动”处于灰色状态,表示IIS服务已经开启。
      • 单击“网站”,在右边列表页查看您安装的网站的状态。如果网站状态为“已停止”,则单击网站,在右侧操作栏的“管理站点”,单击“启动”,启动网站。

  3. 查看端口在实例中是否正常被监听的操作步骤。

    打开cmd窗口,执行如下命令。

    netstat -ano | findstr :80

    如果回显信息如下则说明80端口正常全网监听。否则,请修改监听地址。

  4. 确认实例防火墙已经放行服务。

    1. 单击“控制面板 > Windows防火墙”。
    2. 根据防火墙状态,执行不同操作。
      • 如果防火墙处于关闭状态,不需要再做其他处理。
      • 如果防火墙处于开启状态,则执行以下操作。
        1. 单击“高级设置”。
        2. 在弹出窗口的左侧导航栏中,单击“入站规则”。
        3. 选择“万维网服务 (HTTP 流入量)”,如果处于禁用状态,请重新启用规则。

Linux操作系统

以下操作以CentOS 7操作系统云服务器安装Nginx服务为例。

  1. 确认安全组已经放行80端口。

    1. 登录管理控制台。
    2. 单击管理控制台左上角的,选择区域和项目。
    3. 选择“计算 > 弹性云服务器”。
    4. 在弹性云服务器列表,单击待变更安全组规则的弹性云服务器名称。

      系统跳转至该弹性云服务器详情页面。

    5. 选择“安全组”页签,并单击,查看安全组规则。
    6. 确保云服务器所在的安全组已添加如下安全组规则。

  1. 远程连接ECS实例,确认服务已经开启。

    执行如下命令,检查nginx服务是否已经开启。

    systemctl status nginx

    回显信息如下所示,则说明Nginx已经启动。

    如果未开启,则执行以下命令启动Nginx。

    systemctl start nginx

  2. 执行如下命令,查看端口在实例中是否正常被监听。

    netstat -an | grep 80

    回显信息则说明80端口正常全网监听。如果返回的不是上述结果,请修改监听地址。

    tcp   0 0 0.0.0.0:80    0.0.0.0:*     LISTEN

  3. 查看云服务器防火墙iptables规则列表。

    • 执行以下命令,查看防火墙状态。

      systemctl status firewalld

      firewall-cmd --state

    • 如果防火墙关闭可以执行以下命令开启。

      systemctl start firewalld

      如果开启命令执行后提示“Failed to start firewalld.service: Unit is masked.”请执行以下命令后再重新执行开启防火墙的命令。

      systemctl unmask firewalld

    • 查看打开的端口

      firewall-cmd --zone=public --list-ports

    • 放行TCP 80端口

      firewall-cmd --zone=public --add-port=80/tcp --permanent

    • 更新防火墙规则

      firewall-cmd --reload