サーバーの1つから単一の特定の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-すべてがハングします。ただし、ping可能なホストはsomeのみですが、簡単に取得できる他のURLもあります。
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 * * *
回答ありがとうございます!
問題は、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を強制すると、失敗します:
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'
nc www.fcc-fac.ca 80
を実行し、GET /
と入力してEnterキーを2回押します。
リモートサイトがダウンしているか、あなたをブロックしている可能性があります。
wgetがポート80でIPに接続できないようです。
サーバーがping可能かどうかを確認します。
ping 65.87.238.35
ping 207.195.108.140
iPがping可能な場合は、uがtelnetを使用してポート80に接続できるかどうかを確認します。
telnet 65.87.238.35 80
サーバーがpingに応答しない場合は、おそらくダウンしているか、ソースネットに到達できません。
tracerouteツールを使用してテストし、接続が失敗した場所を確認します。
CURLライブラリを使用するPHPスクリプトのDNS解決が遅い問題を修正しました。
Libcurlドキュメントから:
CURLOPT_IPRESOLVE
ホスト名の解決時に使用するIPアドレスの種類をアプリケーションが選択できるようにします。これは、複数のバージョンのIPを使用してアドレスを解決するホスト名を使用する場合にのみ興味深いものです。許可される値は次のとおりです。
CURL_IPRESOLVE_WHATEVER
デフォルトでは、システムが許可するすべてのIPバージョンにアドレスを解決します。
CURL_IPRESOLVE_V4
IPv4アドレスに解決します。
CURL_IPRESOLVE_V6
IPv6アドレスに解決します。
これらは環境変数として設定できると思います。少なくともPHPを使用している間、これらの設定はリゾルバーの速度に大きな違いをもたらしました。