无法访问ECS实例中运行网站的快速排查方法

更新时间:
复制 MD 格式

本文介绍无法访问ECS实例中运行网站相关问题的快速排查方法。

问题描述

您在访问ECS实例中运行的网站时,可能会遇到如下问题:

  • 提示“未备案或未接入”、“网站内容与备案信息不符”。

  • 无法登录宝塔面板。

  • 浏览器提示“403”、“404”、“502”、“503”等数字类错误。

  • 首次搭建网站且无法访问网站。

  • 网站持续运作时突然无法访问。

  • 无法通过负载均衡SLB访问ECS实例中的网站。

  • 无法访问CDN加速后的网站。

  • 无法访问通过Web应用防火墙(WAF)防护的网站。

  • 云虚拟主机上的网站无法访问。

问题原因

无法访问ECS实例中运行的网站的原因较多,此处列举较为常见的问题原因,具体原因以现场的排查结果为准。

  • TCP 80端口不可用。

  • Web服务不可用。

  • 网站未备案。

  • 网站资源或后端服务存在异常。

  • 建站流程不标准。

  • 源站本身的问题。

说明

引发网站访问异常的相关因素及症状很多,如果您需要了解更多ECS实例中网站无法访问的原因,请参见访问ECS实例异常时的问题排查和指引

排查方法

无法访问ECS实例中运行网站的现象和原因较多,您可以选择下列任意一种方法快速排查问题。

通过流程图排查

您可以根据如图所示的流程图,逐步排查问题。

20230119184601

通过问题现象选择解决方案

针对如下列举的常见问题现象,您可以快速选择对应的问题解决方案。

  • 提示“未备案或未接入”、“网站内容与备案信息不符”

    无论网站是通过IP地址还是通过域名对外提供服务,未备案成功前,均不允许开通网站访问服务。请备案您的网站IP或域名,具体操作,请参见通用网站备案

  • 无法登录宝塔面板。

    可能是宝塔服务未运行或未添加宝塔服务对应端口的安全组规则,具体操作,请参见ECS实例无法登录宝塔面板控制台

  • 浏览器提示“403”、“404”、“502”、“503”等数字类错误。

    浏览器提示数字类错误时,通常表明客户端与服务端的网络是正常的,但网站资源或后端服务存在异常。

  • 首次搭建网站且无法访问网站。

    请确保您按照标准的建站流程进行操作。更多建站流程信息,请参见建站零基础入门

  • 网站持续运作时突然无法访问。

    您需要对ECS实例状态、Web服务或后端数据库分别进行检查。

    • ECS实例状态的检查

      您可以通过ECS自助诊断工具进行检查,然后根据诊断结果中的提示进行操作。 具体操作,请参见诊断ECS实例的健康状态

    • Web服务或后端数据库的检查

      请确保Web服务和后端数据库处于运行状态。如果未运行,请检查日志并根据日志中的错误信息进行修复。

      说明
      • 网站服务的日志文件名一般为access.logerror.log,更多信息,请参见网站服务对应的官网网站。

      • 网站服务后端的PHP、Java、Tomcat、数据库等服务异常时,也会导致无法访问网站。此时,请联系您的网站管理员获取帮助。

  • 无法通过负载均衡SLB访问ECS实例中的网站

    ECS实例前端有负载均衡SLB时,可能是SLB实例的监听策略设置异常,具体操作,请参见无法通过负载均衡SLB访问ECS实例中的网站

  • 无法访问CDN加速后的网站

    您需要先判断是否为源站本身的问题,具体操作,请参见使用CDN加速后网站无法访问的排查步骤

  • 无法访问通过Web应用防火墙(WAF)防护的网站

    您需要先判断是否为源站本身的问题,再判断是否为WAF误拦截问题,具体操作,请参见无法访问通过Web应用防火墙(WAF)防护的网站

  • 云虚拟主机上的网站无法访问

    如果您使用的并非ECS实例,而是云虚拟主机,则需要对云虚拟主机进行排查。 具体操作,请参见虚拟主机上的网站无法访问

解决方案

本文介绍常见的TCP 80端口和Web服务不可用导致该问题的解决方案,操作步骤如下:

TCP 80端口和Web服务不可用导致无法访问Linux实例上运行的网站

说明

以下操作步骤以CentOS 7操作系统为例,具体操作请以您的实际操作系统为准。

TCP 80端口不可用

  1. 远程连接Linux实例。

    具体操作,请参见选择ECS远程连接方式

  2. 执行以下命令,查看TCP 80端口是否被监听。

    netstat -an | grep 80

    回显示例如下,如果返回以下任意一种结果,说明已启动TCP 80端口的Web服务,即检查正常。如果有异常,请参见Web服务不可用进行处理。

    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN # 全网监听
    tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN # 本机监听
    说明

    本机127.0.0.1监听会导致外网无法访问Web服务,只有本机能访问,修改为全网监听。

  3. 查看TCP 80端口是否被放行以及连通情况是否正常。

    1. 查看实例安全组是否放行TCP 80端口,如果没有放行则需要添加安全组规则,具体操作,请参见添加安全组规则

    2. 查看实例操作系统的防火墙是否开启,如果开启则建议关闭防火墙改为使用安全组,具体操作,请参见管理 Linux 实例的系统防火墙

    3. 使用telnettraceroute命令跟踪TCP 80端口的连通情况,具体操作,请参见能够ping通服务器的同时端口不通的排查方法

  4. 查看云服务器带宽是否充足。

    具体操作,请参见Linux实例系统负载的查询及分析

    如果不足,可尝试升级实例带宽。具体操作,请参见修改带宽配置

Web服务不可用

  1. 远程连接Linux实例。

    具体操作,请参见选择ECS远程连接方式

  2. 查看Web服务日志。

    • 执行如下命令,查看Apache的错误日志。

      您可以根据错误日志分析排查问题。

      • CentOSAlinux:

        less /var/log/httpd/error_log
      • Ubuntu:

        less /var/log/apache2/error.log
    • 执行如下命令,查看Nginx的错误日志。

      您可以根据错误日志分析排查问题。

      less /var/log/nginx/error_log
  3. 执行top命令,查看实例运行状态。

    您需要查看进程是否异常,回显示例如下。

    top - 16:03:47 up 21:22,  2 users,  load average: 0.01, 0.02, 0.05
    Tasks: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  7732780 total,  6633068 free,   208044 used,   891668 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  7276512 avail Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1685 root      10 -10  140444  18232  11472 S   1.0  0.2  18:40.04 AliYunDun
     1371 root      10 -10   42320   4492   2988 S   0.3  0.1   0:46.65 AliYunDunUpdate
        1 root      20   0  191048   4084   2612 S   0.0  0.1   0:01.74 systemd
        2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
        4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
        5 root      20   0       0      0      0 S   0.0  0.0   0:00.35 kworker/u8:0
        6 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0
        7 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/0
        8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
        9 root      20   0       0      0      0 S   0.0  0.0   0:10.57 rcu_sched

    load average参数中0.010.020.03分别表示1分钟前、5分钟前和15分钟前到现在的系统负载平均值。一般情况下,如果这个数值除以逻辑CPU的数量大于5(具体数值需要根据实际服务器CPU处理能力以及系统使用情况而定),则表示系统在超负荷运转。此时,您可以根据进程列表中查看%CPU 较高的PID,定位异常进程即COMMAND参数值,然后根据您的系统实际情况处理该异常。

  4. 在控制台查看实例监控信息。

    具体操作,请参见查看实例监控信息

  5. 执行如下命令,查看实例的80端口是否有过多的TCP连接。

    netstat -anp | grep ':80 ' | grep tcp

    回显示例如下。

    xxx@linux:~# netstat -anp |grep 80 |grep tcp
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2551/nginx: master
    tcp        0      0 xxx.xxx.xxx.174:36646   xxx.xxx.xxx.70:80       TIME_WAIT   -
    tcp        0      0 xxx.xxx.xxx.174:51426   xxx.xxx.xxx.70:80       TIME_WAIT   -
    tcp        0      0 xxx.xxx.xxx.174:34034   xxx.xxx.xxx.70:80       TIME_WAIT   -
    tcp        0      0 xxx.xxx.xxx.174:42812   xxx.xxx.xxx.xxx:80      ESTABLISHED 1633/AliYunDun
    tcp6       0      0 :::80                   :::*                    LISTEN      2551/nginx: master
    xxx@linux:~# netstat -anp |grep 80 |grep tcp |wc -l
    6
  6. 执行以下命令,统计TCP的所有连接数。

    netstat -anp |grep tcp |wc -l
  7. TCP的所有连接数与/etc/sysctl.conf配置文件中net.ipv4.tcp_max_tw_buckets参数的最大值进行对比,如果TCP的所有连接数超出该最大值,则执行如下操作:

    1. 执行vi /etc/sysctl.conf命令,编辑/etc/sysctl.conf配置文件,查询net.ipv4.tcp_max_tw_buckets参数。

      vm.swappiness = 0
      kernel.sysrq = 1
      
      net.ipv4.neigh.default.gc_stale_time = 120
      
      # see details in https://help.aliyun.com/knowledge_detail/39428.html
      net.ipv4.conf.all.rp_filter = 0
      net.ipv4.conf.default.rp_filter = 0
      net.ipv4.conf.default.arp_announce = 2
      net.ipv4.conf.lo.arp_announce = 2
      net.ipv4.conf.all.arp_announce = 2
      
      # see details in https://help.aliyun.com/knowledge_detail/41334.html
      net.ipv4.tcp_max_tw_buckets = 5000
      net.ipv4.tcp_syncookies = 1
      net.ipv4.tcp_max_syn_backlog = 1024
      net.ipv4.tcp_synack_retries = 2
      net.ipv4.tcp_slow_start_after_idle = 0

      如果确认TCP的连接数使用很高,容易超出限制,则根据实际情况,增加net.ipv4.tcp_max_tw_buckets参数值的大小。

    2. 执行sysctl -p命令,使配置生效。

TCP 80端口和Web服务不可用导致无法访问Windows实例上运行的网站

说明

以下操作步骤以Windows Server 2012 R2操作系统为例,具体操作请以您的实际操作系统为准。

TCP 80端口不可用

  1. 远程连接Windows实例。

    具体操作,请参见选择ECS远程连接方式

  2. 打开CMD命令提示符。

    1. 单击桌面左下角开始图标图标,然后单击搜索图标图标。

    2. 在搜索框输入cmd

    3. 单击命令提示符

      进入命令提示符。

      Microsoft Windows [版本 6.3.9600]
      (c) 2013 Microsoft Corporation。保留所有权利。
      
      C:\Users\Administrator>
  3. 执行以下命令,查看TCP 80端口是否被监听。

    netstat -ano | findstr :80

    回显示例如下,如果返回以下任意一种结果,说明已启动TCP 80端口的Web服务,即检查正常。如果有异常,请参见Web服务不可用进行处理。

    TCP    0.0.0.0:80           0.0.0.0:0              LISTENING       1172 # 表示全网监听
    TCP    127.0.0.1:80         0.0.0.0:0              LISTENING       1172 # 表示本地监听
    说明

    本机127.0.0.1监听会导致外网无法访问Web服务,只有本机能访问,可执行netsh http delete iplisten ipaddress= 127.0.0.1:80命令,修改为全网监听。

  4. 查看TCP 80端口是否被放行以及连通情况是否正常。

    1. 查看实例安全组是否放行80端口,如果没有放行则需要添加安全组规则,具体操作,请参见添加安全组规则

    2. 查看实例操作系统的防火墙是否开启,如果开启则建议关闭防火墙改为使用安全组,具体操作,请参见Windows系统防火墙策略配置指南

    3. 使用telnettracert命令跟踪80端口的连通情况,具体操作,请参见能够ping通服务器的同时端口不通的排查方法

  5. 查看云服务器带宽是否充足。

    具体操作,请参见Windows实例带宽和CPU跑满或跑高排查

    如果不足,可尝试升级实例带宽。具体操作,请参见修改带宽配置

Web服务不可用

  1. 远程连接Windows实例。

    具体操作,请参见选择ECS远程连接方式

  2. 查看Web服务日志。

    • 方法一:浏览日志文件夹。

      Windows Server 2008 R2及以上版本操作系统的日志路径为:C:\inetpub\logs\LogFiles

    • 方法二:查看IIS管理器。

      1. 选择开始图标 > Windows管理工具 > Internet Information Services((IIS)管理器

      2. 在待查看的Web服务主页IIS区域,单击日志,然后在操作列单击浏览

      3. 日志页面,按照您的实际情况修改日志存放路径并复制对应地址粘贴到文件资源管理器,然后按Enter键。

        您可以在文件资源管理器中查看对应日志文件夹。

  3. 通过任务管理器查看实例运行状态,查看是否有异样进程。

    1. 在桌面单击鼠标右键,然后选择任务管理器

    2. 单击进程页签。

      您可以在任务管理器中查看进程的CPU、内存信息,定位异常进程。

  4. 在控制台查看实例监控信息。

    具体操作,请参见查看实例监控信息

  5. 查看实例80端口是否有过多的TCP连接。

    1. 打开CMD命令提示符。

      1. 单击桌面左下角开始图标图标,然后单击搜索图标图标。

      2. 在搜索框输入cmd

      3. 单击命令提示符

        进入命令提示符。

        Microsoft Windows [版本 6.3.9600]
        (c) 2013 Microsoft Corporation。保留所有权利。
        
        C:\Users\Administrator>
  6. 依次执行以下命令,统计TCP连接数。

    netstat -n |find /i "time_wait" /c
    netstat -n |find /i "close_wait" /c
    netstat -n |find /i "established" /c

    默认动态端口的数量为16384个(从49152起始,到65535结束),如果close_wait数量接近动态端口的数量,则表示存在大量的close_wait连接未释放,您需要执行下一步,修改注册表来降低Time Wait时间。

    C:\Users\Administrator>netstat -n |find /i "time_wait" /c
    10
    
    C:\Users\Administrator>netstat -n |find /i "close_wait" /c
    0
    
    C:\Users\Administrator>netstat -n |find /i "established" /c
    7
    
    C:\Users\Administrator>
  7. 打开注册表编辑器。

    1. 单击桌面左下角开始图标图标,然后单击搜索图标图标。

    2. 在搜索框输入regedit

    3. 单击regedit

      进入注册表编辑器。

  8. 在注册表编辑器的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路径下,将注册表项TcpTimedWaitDelay的数值数据设置为十进制数值30

    如果TcpTimedWaitDelay项不存在,请新建对应注册表项,然后再修改数值数据。以TcpTimedWaitDelay不存在为例,操作如下:

    1. 在注册表编辑器的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路径下,右键单击注册表项空白区域,然后选择新建(N) > DWORD (32 位)值

    2. 输入TcpTimedWaitDelay,按Enter键。

    3. 右键单击注册表项TcpTimedWaitDelay,然后单击修改

    4. 在对话框中,勾选十进制,然后将数值数据设置为30

    5. 单击确定