怎樣排除網路連線逾時 (network connection timed out) 問題

輸入網站連結,卻遇到網路連線逾時 (network connection timed out) 錯誤訊息時。從網站服務、主機內部、防火牆議題逐層找到問題原因。

Photo by Lenharth Systems on StockSnap


錯誤狀況

使用 SSL/TLS 免費憑證 Let's Encrypt,每三個月要重新驗證。驗證網域所有權時,遇到以下錯誤:

Detail: x.x.x.x: Fetching http://www.網站.com.tw/.well-known/acme-challenge/6gT5QrYjlZ_7CcqBDmm_yr1F2G5WEqxQSE1jwrzyBvA: Timeout during connect (likely firewall problem)

手動在同樣位置建立檔案,將同樣連結貼到瀏覽器,瀏覽時也遇到同樣連線逾時狀況。


瞭解問題

從使用者瀏覽器輸入連結到網站,總共經過四個階段:互聯網 --> 主機機房 --> 實體主機、雲端主機 --> 網站服務。

1. 網站服務


SSH 登入該網站所在主機後,先檢查網路服務是否正在啟動的狀態:

網站服務可能是 Apache HTTP ServerNGINX Web Server ,請自行確認。Linux 作業系統確認 Apache HTTP Server 是否正在啟動的語法是

sudo systemctl status apache2 # 適用 Debian/Ubuntu 作業系統
systemctl status httpd # 適用 RHEL/CentOS/Fedora 作業系統

2. 主機內部


在主機內部,測試網站服務可以連線,可以使用文字瀏覽器瀏覽本地端的網站連結

(1) 安裝 lynx 文字瀏覽器

sudo apt install lynx # 適用 Debian/Ubuntu 作業系統

sudo yum -y install lynx # 適用 RHEL/CentOS/Fedora 作業系統

(2) 使用  lynx 文字瀏覽器瀏覽網站

lynx http://127.0.01

或 lynx http://localhost

(3) 檢查網站存取紀錄檔:

因為不同網站服務紀錄檔存放位置可能不同,以下以 Ubuntu Apache 為例。

sudo tail /var/log/apache2/access.log

sudo tail /var/log/apache2/error.log

成功瀏覽網站的同時,網站存取紀錄檔會自動新增一筆紀錄

如果不是網站服務,則可以使用

telnet 127.0.0.1 <PORT>

3. 防火牆議題


如果從主機內部可以連到網站,但是為什麼從外面卻無法連線到網站。使用者從最外層的互聯網連線到網站服務,還會經過 (1) 主機機房的防火牆以及 (2) 主機本身的防火牆。

「主機機房的防火牆」還需要去聯絡機房網管才能知道防火牆規則,所以我們先旁敲側擊分析防火牆的狀況。

檢查 Ubuntu 主機本身並未啟用防火牆服務 (Ubuntu UFW),也沒有啟用 SELinux。問題很有可能出在「主機機房的防火牆」。使用外部網路打開瀏覽器輸入連結,再檢查網站存取紀錄檔:

因為不同網站服務紀錄檔存放位置可能不同,以下以 Ubuntu Apache 為例。

sudo tail /var/log/apache2/access.log

sudo tail /var/log/apache2/error.log

切換到儲存到網站紀錄的目錄,觀察有沒有其他更新的 log

sudo ls -lht /var/log/apache2

沒有新增任何存取紀錄,代表連線還沒有到網站服務,就被機房的防火牆擋掉。這時候可以有禮貌地寫信給網管陳述問題。

附帶一提:Amazon RDS 雲端服務為例,預設是關閉外部連線。需要額外設定連入 (inbound) 與連出 (outbound) 的防火牆規則。


4. 互聯網 ISP


有些時候是 ISP 網路 (網際網路連線服務公司,Internet Service Provider) 連線出問題,如果要排除是不是這個環節出問題,可以

如果要例行性定期監測自己網站是否要線上,請參考 Web ping 清單

如果不是網站服務,則可以使用

telnet 主機網域或IP <PORT>

參考資料

圖片素材


留言