如何對 Apache 子域超時進行故障排除?
我的伺服器上有幾個子域,當從任何 http 客戶端(在 80 上的 HTTP 或 443 上的 HTTPS,取決於子域)聯繫時,所有子域都會給我超時。
當直接從同一伺服器聯繫時,HTTP 請求有效並由 Apache 記錄:
$ wget http://test.yosko.net/ ... 2020-08-19 12:34:20 (603 KB/s) - ‘index.html’ saved [6/6]
但是當從任何其他客戶端完成時,我會超時,並且在 Apache 的 error.log 或 access.log 中找不到任何內容。
起初我想到了我的 HTTPS 子域的 certbot 配置存在問題,但由於 HTTP 子域相同,我認為這是一個更廣泛的問題。由於伺服器上沒有代理或反向代理,我看不到它來自哪裡。
它突然發生,幾天前我的角色沒有任何改變,從那時起,在長時間的失敗之間,事情在這里和那里工作了幾個小時。
有關如何解決此問題的任何想法?
附加資訊:我在 Ubuntu Server 20.04 上使用 Apache 2.4。
編輯 1:IPv6 問題
正如這裡所建議的,我在ipv6-test.com上測試了我上面的連結,它確實給出了超時。我想我的 ISP 嘗試在 IPv6 中聯繫我的網站(它失敗了),而其他人仍在嘗試在 IPv4 中(它可以工作)。
但現在我知道我自己也可以嘗試。來自我的客戶:
$ wget -4 http://test.yosko.net/ ... 2020-08-20 09:25:53 (151 KB/s) - «index.html» enregistré [6/6] $ wget -6 http://test.yosko.net/ ... HTTP request sent, awaiting response... Read error (Connection timed out) in headers.
編輯2:目前配置
我的目前
/etc/apache2/ports.conf
是預設的,從所有 IP 監聽:Listen 80
它確實適用於 IPv6(請參閱“
tcp6
”提及):$ sudo netstat -lnptu | grep "apache2\W*$" tcp6 0 0 :::443 :::* LISTEN 89445/apache2 tcp6 0 0 :::80 :::* LISTEN 89445/apache2
還有我的虛擬主機:
<VirtualHost *:80>
我也試過這個,但問題仍然存在:
<VirtualHost *:80 [::]:80>
站點 test.yosko.net 解析為 IPv4 和 IPv6 地址:
triss:~> dig test.yosko.net +short yosko.net. 91.121.170.211 triss:~> dig test.yosko.net +short aaaa yosko.net. 2001:41d0:1:ebd3::1
但它甚至無法響應 IPv6 上的 ping:
triss:~> ping -6 -c 20 test.yosko.net PING test.yosko.net(2001:41d0:1:ebd3::1 (2001:41d0:1:ebd3::1)) 56 data bytes --- test.yosko.net ping statistics --- 20 packets transmitted, 0 received, 100% packet loss, time 493ms
您確定您在該主機上正確配置了 IPv6 嗎?如果是 - 防火牆是否到位並阻止它?如果您使用隧道 - 您是否在 IPv4 防火牆中啟用了適當的協議並在隧道介面上設置了正確的 MTU?
同時,我建議刪除此主機名的 AAAA 記錄,並且只有在 IPv6 被證明可以工作時才重新啟用它。