我的服务器上有几个子域,从任何 http 客户端(根据子域的不同,无论是 HTTP 80 还是 HTTPS 443)联系时都会超时。
当直接从同一服务器联系时,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>
答案1
站点 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 可以正常工作后才重新启用它。