如何解决 Apache 子域超时问题?

如何解决 Apache 子域超时问题?

我的服务器上有几个子域,从任何 http 客户端(根据子域的不同,无论是 HTTP 80 还是 HTTPS 443)联系时都会超时。

例如 :http://test.yosko.net

当直接从同一服务器联系时,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 可以正常工作后才重新启用它。

相关内容