假设我有一个域名“my.domain.com”,其 A 记录可解析为我的服务器(运行 Ubuntu 20.04)的公共 IPv4 地址(例如 160.200.200.21)
我已经在服务器上安装了 BigBlueButton,几乎一切正常,只是 BigBlueButton 需要能够从域名或公共 IP 访问自身,但出现失败并出现以下错误:
curl: (28) Failed to connect to port 443: Connection timed out
# Error: Could not connect to the configured hostname/IP address
因此我做了以下检查:
- 在远程服务器的 80 和 443 端口上使用
netcat -l
以确保端口已打开 => 成功
我还运行了以下命令:
~# curl https://my.domain.com
curl: (28) Failed to connect to my.domain.com port 443: Connection timed out
~# curl my.domain.com
curl: (28) Failed to connect to my.domain.com port 80: Connection timed out
~# wget https://my.domain.com
--2023-11-07 20:08:51-- https://my.domain.com/
Resolving my.domain.com (my.domain.com)... 160.200.200.21
Connecting to my.domain.com (my.domain.com)|160.200.200.21|:443... failed: Connection timed out.
Retrying.
但curl http://google.com
有回应!
另请注意,上述命令在另一台服务器或计算机上也能完美运行
~# netstat -anltp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4082/nginx: master
tcp 0 0 127.0.0.1:52562 127.0.0.1:8021 ESTABLISHED 13903/node
tcp6 0 0 :::80 :::* LISTEN 4082/nginx: master
tcp6 0 0 :::8021 :::* LISTEN 13262/freeswitch
tcp6 0 0 127.0.0.1:8090 :::* LISTEN 13076/java
tcp6 0 0 127.0.0.1:32800 127.0.0.1:8021 ESTABLISHED 13745/java
tcp6 0 0 127.0.0.1:8021 127.0.0.1:32800 ESTABLISHED 13262/freeswitch
tcp6 0 0 127.0.0.1:8021 127.0.0.1:52562 ESTABLISHED 13262/freeswitch
~# netstat -anltp | grep :443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 12628/haproxy
tcp6 0 0 :::443 :::* LISTEN 12628/haproxy
此时我不知道该再检查什么或在哪里查找问题。此服务器是虚拟机,由提供商提供,所以我只有 ssh 和 root 访问权限,提供商说它位于防火墙后面,但由于端口显然已打开,我不知道是否可以责怪他们。
所以发生的情况是,尽管相关端口已打开,但 my.domain.com 在服务器外部(在浏览器或 CLI 上)可以完全访问,但在服务器内部却无法访问。
我发现一件很奇怪的事情,也许这些信息会很有用:当我netcat -l 80
在我的服务器上执行此操作时,即使 Nginx 在端口 80 上运行时它也能正常工作。netcat -l 443
失败说端口正在使用中,我必须先关闭使用它的进程,然后才能运行测试。
答案1
如果您的虚拟机无法通过外部连接访问自身,您可以修改 /etc/hosts,将其中一个网络适配器 IP 地址(甚至是 localhost)映射到计算机的 DNS 名称。这些配置优先于外部 DNS 中的配置。
127.0.0.1 my.domain.com