本文介紹無法訪問ECS實例中運行網站相關問題的快速排查方法。
問題描述
您在訪問ECS實例中運行的網站時,可能會遇到如下問題:
提示“未備案或未接入”、“網站內容與備案信息不符”。
無法登錄寶塔面板。
瀏覽器提示“403”、“404”、“502”、“503”等數字類錯誤。
首次搭建網站且無法訪問網站。
網站持續運作時突然無法訪問。
無法通過負載均衡SLB訪問ECS實例中的網站。
無法訪問CDN加速后的網站。
無法訪問通過Web應用防火墻(WAF)防護的網站。
云虛擬主機上的網站無法訪問。
問題原因
無法訪問ECS實例中運行的網站的原因較多,此處列舉較為常見的問題原因,具體原因以現場的排查結果為準。
TCP 80端口不可用。
Web服務不可用。
網站未備案。
網站資源或后端服務存在異常。
建站流程不標準。
源站本身的問題。
引發網站訪問異常的相關因素及癥狀很多,如果您需要了解更多ECS實例中網站無法訪問的原因,請參訪問ECS實例異常時的問題排查和指引。
排查方法
無法訪問ECS實例中運行網站的現象和原因較多,您可以選擇下列任意一種方法快速排查問題。
解決方案
本文介紹常見的TCP 80端口和Web服務不可用導致該問題的解決方案,操作步驟如下:
TCP 80端口和Web服務不可用導致無法訪問Linux實例上運行的網站
以下操作步驟以CentOS 7操作系統為例,具體操作請以您的實際操作系統為準。
TCP 80端口不可用
遠程連接Linux實例。
具體操作,請參見連接方式概述。
執行以下命令,查看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服務,只有本機能訪問,修改為全網監聽。
查看TCP 80端口是否被放行以及連通情況是否正常。
查看實例安全組是否放行TCP 80端口,如果沒有放行則需要添加安全組規則,具體操作,請參見添加安全組規則。
查看實例操作系統的防火墻是否開啟,如果開啟則建議關閉防火墻改為使用安全組,具體操作,請參見開啟或關閉Linux實例中的系統防火墻。
使用telnet和traceroute命令跟蹤TCP 80端口的連通情況,具體操作,請參見能夠ping通服務器的同時端口不通的排查方法。
查看云服務器帶寬是否充足。
具體操作,請參見Linux實例系統負載的查詢及分析。
如果不足,可嘗試升級實例帶寬。具體操作,請參見修改帶寬配置。
Web服務不可用
遠程連接Linux實例。
具體操作,請參見連接方式概述。
查看Web服務日志。
執行如下命令,查看Apache的錯誤日志。
您可以根據錯誤日志分析排查問題。
CentOS或Alinux:
less /var/log/httpd/error_log
Ubuntu:
less /var/log/apache2/error.log
執行如下命令,查看Nginx的錯誤日志。
您可以根據錯誤日志分析排查問題。
less /var/log/nginx/error_log
執行
top
命令,查看實例運行狀態。您需要查看進程是否異常,回顯示例如下。
load average
參數中0.01
、0.02
和0.03
分別表示1分鐘前、5分鐘前和15分鐘前到現在的系統負載平均值。一般情況下,如果這個數值除以邏輯CPU的數量大于5(具體數值需要根據實際服務器CPU處理能力以及系統使用情況而定),則表示系統在超負荷運轉。此時,您可以根據進程列表中查看%CPU
較高的PID,定位異常進程即COMMAND
參數值,然后根據您的系統實際情況處理該異常。在控制臺查看實例監控信息。
具體操作,請參見查看實例監控信息。
查看實例CPU、內存是否充足,如果不足,請參見云服務器ECS Linux系統CPU占用率較高問題排查思路進行處理。
查看實例帶寬是否充足,如果不足,可嘗試升級實例帶寬。具體操作,請參見修改帶寬配置。
執行如下命令,查看實例的80端口是否有過多的TCP連接。
netstat -anp |grep 80 |grep tcp
回顯示例如下。
執行以下命令,統計TCP的所有連接數。
netstat -anp |grep tcp |wc -l
將TCP的所有連接數與
/etc/sysctl.conf
配置文件中net.ipv4.tcp_max_tw_buckets
參數的最大值進行對比,如果TCP的所有連接數超出該最大值,則執行如下操作:執行
vi /etc/sysctl.conf
命令,編輯/etc/sysctl.conf
配置文件,查詢net.ipv4.tcp_max_tw_buckets
參數。如果確認TCP的連接數使用很高,容易超出限制,則根據實際情況,增加
net.ipv4.tcp_max_tw_buckets
參數值的大小。執行
sysctl -p
命令,使配置生效。
TCP 80端口和Web服務不可用導致無法訪問Windows實例上運行的網站
以下操作步驟以Windows Server 2012 R2操作系統為例,具體操作請以您的實際操作系統為準。
TCP 80端口不可用
遠程連接Windows實例。
具體操作,請參見連接方式概述。
打開CMD命令提示符。
單擊桌面左下角圖標,然后單擊圖標。
在搜索框輸入
cmd
。單擊命令提示符。
進入命令提示符。
執行以下命令,查看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
命令,修改為全網監聽。查看TCP 80端口是否被放行以及連通情況是否正常。
查看實例安全組是否放行80端口,如果沒有放行則需要添加安全組規則,具體操作,請參見添加安全組規則。
查看實例操作系統的防火墻是否開啟,如果開啟則建議關閉防火墻改為使用安全組,具體操作,請參見Windows Server系統的ECS實例防火墻策略的配置方法。
使用telnet和tracert命令跟蹤80端口的連通情況,具體操作,請參見能夠ping通服務器的同時端口不通的排查方法。
查看云服務器帶寬是否充足。
具體操作,請參見Windows實例帶寬和CPU跑滿或跑高排查。
如果不足,可嘗試升級實例帶寬。具體操作,請參見修改帶寬配置。
Web服務不可用
遠程連接Windows實例。
具體操作,請參見連接方式概述。
查看Web服務日志。
方法一:瀏覽日志文件夾。
Windows Server 2008 R2及以上版本操作系統的日志路徑為:
C:\inetpub\logs\LogFiles
。方法二:查看IIS管理器。
選擇 > Windows管理工具 > Internet Information Services((IIS)管理器。
在待查看的Web服務主頁IIS區域,單擊日志,然后在操作列單擊瀏覽。
在日志頁面,按照您的實際情況修改日志存放路徑并復制對應地址粘貼到文件資源管理器,然后按
Enter
鍵。您可以在文件資源管理器中查看對應日志文件夾。
通過任務管理器查看實例運行狀態,查看是否有異樣進程。
在桌面單擊鼠標右鍵,然后選擇任務管理器。
單擊進程頁簽。
您可以在任務管理器中查看進程的CPU、內存信息,定位異常進程。
在控制臺查看實例監控信息。
具體操作,請參見查看實例監控信息。
查看實例CPU、內存是否充足,如果不足,請參見Windows實例帶寬和CPU跑滿或跑高排查進行處理。
查看實例帶寬是否充足,如果不足,可嘗試升級實例帶寬。具體操作,請參見修改帶寬配置。
查看實例80端口是否有過多的TCP連接。
打開CMD命令提示符。
單擊桌面左下角圖標,然后單擊圖標。
在搜索框輸入
cmd
。單擊命令提示符。
進入命令提示符。
依次執行以下命令,統計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時間。打開注冊表編輯器。
單擊桌面左下角圖標,然后單擊圖標。
在搜索框輸入
regedit
。單擊regedit。
進入注冊表編輯器。
在注冊表編輯器的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters
路徑下,將注冊表項TcpTimedWaitDelay
的數值數據設置為十進制數值30
。如果
TcpTimedWaitDelay
項不存在,請新建對應注冊表項,然后再修改數值數據。以TcpTimedWaitDelay
不存在為例,操作如下:在注冊表編輯器的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters
路徑下,右鍵單擊注冊表項空白區域,然后選擇新建(N) > DWORD (32 位)值。輸入
TcpTimedWaitDelay
,按Enter
鍵。右鍵單擊注冊表項
TcpTimedWaitDelay
,然后單擊修改。在對話框中,勾選十進制,然后將數值數據設置為
30
。單擊確定。