从我的一台服务器向单个特定 URL 发送 wget 总是超时。此框中的所有其他 URL 工作正常。此 URL 在我拥有的任何其他框中都可以正常工作。以下是输出:
wget -T 10 http://www.fcc-fac.ca
--2011-07-14 14:44:29-- http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... 65.87.238.35, 207.195.108.140
Connecting to www.fcc-fac.ca|65.87.238.35|:80... failed: Connection timed out.
Connecting to www.fcc-fac.ca|207.195.108.140|:80... failed: Connection timed out
你能告诉我哪里出了问题吗?我该如何排除故障?我正在使用 Ubuntu 11.04 (GNU/Linux 2.6.38-8-server x86_64)
提前非常感谢您,并原谅我的菜鸟无知:)
ping、telnet、nc www.fcc-fac.ca 80 - 全部挂起。但是,其他一些 URL 很容易通过 wget 获取,尽管只有一些其主机均可 ping 通。
traceroute 没有告诉我太多信息:
7 rx0nr-access-communications.wp.bigpipeinc.com (66.244.208.10) 148.834 ms 149.018 ms 148.940 ms
8 sw-1-research.accesscomm.ca (24.72.3.9) 158.901 ms 159.805 ms 160.162 ms
9 65.87.238.126 (65.87.238.126) 150.069 ms 148.861 ms 148.846 ms
10 * * *
...
30 * * *
非常感谢您的回答!
答案1
我认为问题在于 wget 不能很好地处理 IPv6 地址,而 DNS 服务器正在为该站点发送 IPv6。如果我误解了您的问题,请见谅。检查这些测试:
hmontoliu@ulises:~$ wget -T10 http://www.fcc-fac.ca
--2011-07-14 16:44:34-- http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... failed: Connection timed out.
wget: unable to resolve host address `www.fcc-fac.ca'
如果我强制使用 IPv6,因为我认为您的问题与 IPv6 有关,则会失败:
hmontoliu@ulises:~$ wget -6 http://www.fcc-fac.ca
--2011-07-14 16:40:44-- http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... failed: No address associated with hostname.
wget: unable to resolve host address `www.fcc-fac.ca'
但是,如果我强制使用 IPv4,它会直接下载索引页
hmontoliu@ulises:~$ wget -4 http://www.fcc-fac.ca
--2011-07-14 16:40:56-- http://www.fcc-fac.ca/
Resolving www.fcc-fac.ca... 65.87.238.35, 207.195.108.140
Connecting to www.fcc-fac.ca|65.87.238.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6554 (6,4K) [text/html]
Saving to: `index.html'
答案2
运行nc www.fcc-fac.ca 80
,输入GET /
并按两次 Enter。
远程视线可能已关闭或者阻挡了您。
答案3
看来 wget 无法通过端口 80 连接到您的 IP。
检查你的服务器是否可 ping 通:
ping 65.87.238.35
ping 207.195.108.140
如果可以 ping 通 IP,请检查是否可以使用 telnet 连接到端口 80:
远程登录 65.87.238.35 80
如果服务器没有响应 ping,则可能是服务器已关闭或无法访问您的源网络。
使用 traceroute 工具进行测试,查看连接失败的位置。
答案4
修复使用 CURL 库的 PHP 脚本中 DNS 解析缓慢的问题。
来自 libcurl 文档:
CURLOPT_IPRESOLVE
允许应用程序选择在解析主机名时使用哪种 IP 地址。这仅在使用解析使用多个 IP 版本的地址的主机名时才有意义。允许的值为:
CURL_IPRESOLVE_WHATEVER
默认情况下,将地址解析为系统允许的所有 IP 版本。
CURL_IPRESOLVE_V4
解析为 IPv4 地址。
CURL_IPRESOLVE_V6
解析为 IPv6 地址。
我相信这些可以设置为环境变量。至少在使用 PHP 时,这些设置对解析器速度有很大影响。