このトピックでは、Elastic Compute Service (ECS) インスタンスでホストされているWebサイトにアクセスできないという問題をトラブルシューティングする方法について説明します。
問題の説明
ブラウザを使用してECSインスタンスでホストされているWebサイトにアクセスすると、次の症状が発生する可能性があります。
WebサイトにICP登録がないか、接続されていないか、Webサイトのコンテンツが登録情報に準拠していないことを確認します。
ブラウザは、403、404、502、503などの数値エラーコードを返します。
Webサイトを構築するのはこれが初めてで、Webサイトにアクセスできません。
ウェブサイトは長期間実行され、突然アクセスできなくなります。
ECSインスタンスに関連付けられているServer Load Balancer (SLB) インスタンスを使用してWebサイトにアクセスすることはできません。
WebサイトはContent Delivery Network (CDN) によって高速化されており、アクセスできません。
WebサイトはWebアプリケーションファイアウォール (WAF) によって保護されており、アクセスできません。
発生原因
以下の一般的な理由を含むさまざまな理由により、ECSインスタンス上のWebサイトにアクセスできない場合があります。 トラブルシューティング操作を実行して、問題の原因を特定します。
TCPポート80は使用できません。
webサービスが利用できません。
このウェブサイトにはICP申請がありません。
Webサイトのリソースまたはバックエンドサービスで例外が発生します。
ウェブサイトが正しく構築されていません。
ウェブサイトで問題が発生します。
他の要因もWebサイトアクセスの失敗につながり、さまざまな症状を示す可能性があります。 ECSインスタンスでのWebサイトアクセス障害のその他の原因については、「ECSインスタンス例外へのアクセスに関するトラブルシューティングとガイドライン」をご参照ください。
トラブルシューティング方法
次のいずれかの方法を使用して問題をトラブルシューティングできます。
問題をフローチャートに基づいてトラブルシューティング
次の図に示すように、問題を段階的にトラブルシューティングできます。
トラブルシューティング問題に基づいて症状
症状に基づいてソリューションを選択できます。
WebサイトにICP登録がないか、接続されていないか、Webサイトのコンテンツが登録情報に準拠していないことを確認します。
IPアドレスまたはドメイン名を使用してWebサイトにアクセスできるかどうかに関係なく、ICP申請を取得する前にWebサイトをオンラインで起動しないでください。 WebサイトのIPアドレスまたはドメイン名のICP申請を申請します。 詳細については、「通常のWebサイトのICPファイリング要件」をご参照ください。
ブラウザーは、数値エラーコード (403、404、502、503など) を返します。
ほとんどの場合、ブラウザが数値エラーコードを返すと、クライアントとサーバー間のネットワークは期待どおりに実行されますが、Webサイトのリソースまたはバックエンドサービスで例外が発生します。 問題のトラブルシューティング方法については、「ECSインスタンスで実行されているWebサイトの共通ステータスコードの分析」をご参照ください。
Webサイトを構築し、Webサイトにアクセスできないのはこれが初めてです。
Webサイトを構築するには、必ず標準のWebサイト構築手順に従ってください。 手順の詳細については、「クイックスタート」をご参照ください。
Webサイトが長期間実行され、突然アクセスできなくなりました。
webサービスとwebサイトのバックエンドデータベースが実行されているかどうかを確認します。 webサービスまたはバックエンドデータベースが実行されていない場合は、関連するログでエラーメッセージを確認し、エラーメッセージに基づいて問題を解決します。
説明ほとんどの場合、webサービスのログファイルの名前はaccess.logまたはerror.logです。 詳細については、webサービスの公式webサイトにアクセスしてください。
PHP、Java、Tomcat、データベースなど、Webサイトのバックエンドサービスの例外も、Webサイトへのアクセスに失敗する可能性があります。 この場合は、Webサイト管理者に連絡してください。
ECSインスタンスに関連付けられているSLBインスタンスを使用してWebサイトにアクセスすることはできません。
WebサイトをホストするECSインスタンスがSLBインスタンスに関連付けられている場合、Webサイトアクセスの失敗は、SLBインスタンスのリスナーポリシーの例外が原因である可能性があります。 問題のトラブルシューティング方法については、「SLBインスタンスにアクセスできない理由」をご参照ください。
WebサイトはCDNによって高速化され、アクセスできません。
アクセスの失敗がWebサイトの設定によって引き起こされているかどうか、およびWebサイトがCDNによって高速化されているかどうかを確認します。 問題のトラブルシューティング方法については、「」をご参照ください。 Alibaba Cloud Content Delivery Network Accelerationの使用後に到達できないWebサイトのトラブルシューティング。
WebサイトはWAFによって保護されており、アクセスできません。
アクセスの失敗がWebサイトの設定に起因しているかどうか、およびWebサイトへのトラフィックがWAFによってブロックされているかどうかを確認します。 問題のトラブルシューティング方法については、「Webサイトアクセス例外のトラブルシューティング方法」を参照してください。
ソリューション
このセクションでは、利用できないTCPポート80または利用できないwebサービスによって引き起こされるwebサイトアクセス障害を解決する方法について説明します。
利用できないTCPポート80または利用できないwebサービスにより、Linuxインスタンスでホストされているwebサイトにアクセスできなくなります
このセクションでは、CentOS 7を実行するECSインスタンスが使用されます。 実行する必要がある操作は、インスタンスのオペレーティングシステムによって異なる場合があります。
利用できないTCPポート80
Linuxインスタンスに接続します。
詳細については、「接続方法」をご参照ください。
次のコマンドを実行して、webサービスがTCPポート80でリッスンしているかどうかを確認します。
netstat -an | grep 80
次のサンプルのコマンド出力は、webサービスが既に有効になっており、TCPポート80でリッスンしていることを示します。 例外が発生した場合は、ECSインスタンスで実行されているWebサイトにアクセスできないで説明されている操作を実行して、例外を解決します。
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN # Listen to all IP addresses
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN # Listen only to the IP address 127.0.0.1 of the instance.
説明webサービスがTCPポート80で127.0.0.1のみをリッスンする場合、外部デバイスはwebサービスにアクセスできません。 TCPポート80のすべてのIPアドレスをリッスンするようにwebサービスを設定します。
TCPポート80が開いていて到達できるかどうかを確認します。
インスタンスのセキュリティグループがTCPポート80のトラフィックを許可しているかどうかを確認します。 セキュリティグループがTCPポート80のトラフィックを許可しない場合は、ポートのトラフィックを許可するルールをセキュリティグループに追加します。 ルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
インスタンスのオペレーティングシステムのファイアウォールが有効になっているかどうかを確認します。 ファイアウォールが有効になっている場合は、ファイアウォールを無効にし、代わりにセキュリティグループを使用してインスタンスとの間のトラフィックを制御することを推奨します。 ファイアウォールを有効または無効にする方法については、「Linuxインスタンスのシステムファイアウォール機能を有効または無効にする」をご参照ください。
TELNETおよびtracerouteコマンドを使用して、TCPポート80に到達できるかどうかを確認します。 詳細については、「インスタンスをpingできますが、インスタンスのポートをpingできない場合の対処方法」をご参照ください。
インスタンスの帯域幅が十分かどうかを確認します。
詳細については、「Linuxインスタンスの高負荷の問題のトラブルシューティングと解決」をご参照ください。
インスタンスの帯域幅が不十分な場合は、帯域幅をアップグレードします。 詳細については、以下をご参照ください。 帯域幅設定の変更
利用できないwebサービス
Linuxインスタンスに接続します。
詳細については、「接続方法」をご参照ください。
webサービスのログを表示します。
インスタンスのオペレーティングシステムに基づいて次のいずれかのコマンドを実行し、Apacheのエラーログを表示します。
エラーログに基づいて、問題を分析およびトラブルシューティングできます。
インスタンスがCentOSまたはAlinuxオペレーティングシステムを実行している場合は、次のコマンドを実行してApacheのエラーログを表示します。
less /var/log/httpd/error_log
インスタンスがUbuntuオペレーティングシステムを実行している場合は、次のコマンドを実行してApacheのエラーログを表示します。
less /var/log/apache2/error.log
次のコマンドを実行して、NGINXのエラーログを表示します。
エラーログに基づいて、問題を分析およびトラブルシューティングできます。
less /var/log/nginx/error_log
top
コマンドを実行して、インスタンスの動作ステータスを表示します。コマンド出力の例を次の図に示します。 プロセスが期待どおりに実行されているかどうかを確認します。
上記のコマンド出力では、
load average
に0.01
、0.02
、0.03
の3つの値があります。 これらの値は、前の1分間の負荷平均が0.01であり、前の5分間の負荷平均が0.02であり、前の15分間の負荷平均が0.03であることを示しています。 通常の場合、負荷平均値を論理CPUの数で割った値が5より大きい場合、CPUは過負荷になります。 このベンチマーク値は、インスタンスの実際のCPU機能とシステム使用量に基づいて異なる場合があります。 CPUが過負荷になっている場合は、プロセスリストで大きな% CPU
値に対応するプロセスID (PID) を見つけ、COMMAND
値に基づいて異常プロセスを特定し、プロセス例外を解決できます。ECSコンソールでインスタンスのモニタリングデータを表示します。
詳細については、「ECSインスタンスのモニタリング情報の表示」をご参照ください。
インスタンスに十分なCPUおよびメモリリソースがあるかどうかを確認します。 インスタンスのCPUまたはメモリリソースが不足している場合は、「Linuxインスタンスの高CPU使用率の解決」に記載されている操作を実行してください。
インスタンスの帯域幅が十分かどうかを確認します。 インスタンスの帯域幅が不十分な場合は、帯域幅をアップグレードします。 詳細については、以下をご参照ください。 帯域幅設定の変更
次のコマンドを実行して、インスタンスでポート80に確立されているTCP接続の数が上限を超えているかどうかを確認します。
netstat -anp | grep 80 | grep tcp
コマンド出力の例を次の図に示します。
次のコマンドを実行して、TCP接続の数を確認します。
netstat -anp | grep tcp | wc -l
TCP接続の数と、
/etc/sysctl.conf
ファイルで設定されているnet.ipv4.tcp_max_tw_buckets
の値を比較します。 net.ipv4.tcp_max_tw_bucketsパラメーターは、インスタンスで許可されるTCP接続の最大数を指定します。 TCP接続の数がnet.ipv4.tcp_max_tw_bucketsの値を超える場合は、次の手順を実行します。vi /etc/sysctl.conf
コマンドを実行して/etc/sysctl.conf
ファイルを編集し、net.ipv4.tcp_max_tw_buckets
パラメーターの値を表示します。TCP接続の数が多く、最大数を超えそうな場合は、ビジネス要件に基づいて
net.ipv4.tcp_max_tw_buckets
の値を増やします。sysctl -p
を実行して設定が反映されたか確認します。
利用できないTCPポート80または利用できないwebサービスにより、Windowsインスタンスでホストされているwebサイトにアクセスできなくなります
このセクションでは、Windows Server 2012 R2を実行するECSインスタンスが使用されます。 実行する必要がある操作は、インスタンスのオペレーティングシステムによって異なる場合があります。
利用できないTCPポート80
Windowsインスタンスに接続します。
詳細については、「接続方法」をご参照ください。
コマンドプロンプトを起動します。
デスクトップの左下隅にあるアイコンをクリックし、アイコンをクリックします。
検索ボックスに
cmd
と入力します。[コマンドプロンプト] をクリックします。
コマンドプロンプトウィンドウを開きます。
次のコマンドを実行して、webサービスがTCPポート80でリッスンしているかどうかを確認します。
netstat -ano | findstr :80
次のサンプルのコマンド出力は、webサービスが既に有効になっており、TCPポート80でリッスンしていることを示します。 例外が発生した場合は、ECSインスタンスで実行されているWebサイトにアクセスできないで説明されている操作を実行して、例外を解決します。
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 1172 # Listen to all IP addresses. TCP 127.0.0.1:80 0.0.0.0:0 LISTENING 1172 # Listen only to the IP address 127.0.0.1 of the instance.
説明webサービスがTCPポート80で127.0.0.1のみをリッスンする場合、インスタンスのみがwebサービスにアクセスできます。
netsh http delete iplisten ipaddress= 127.0.0.1:80
コマンドを実行して、TCPポート80のすべてのIPアドレスをリッスンするようにwebサービスを設定します。TCPポート80が開いていて到達できるかどうかを確認します。
インスタンスのセキュリティグループがTCPポート80のトラフィックを許可しているかどうかを確認します。 セキュリティグループがTCPポート80のトラフィックを許可しない場合は、ポートのトラフィックを許可するルールをセキュリティグループに追加します。 ルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
インスタンスのオペレーティングシステムのファイアウォールが有効になっているかどうかを確認します。 ファイアウォールが有効になっている場合は、ファイアウォールを無効にし、代わりにセキュリティグループを使用してインスタンスとの間のトラフィックを制御することを推奨します。 ファイアウォールを有効または無効にする方法については、「Windows Serverインスタンスでのファイアウォールポリシーの構成」をご参照ください。
TELNETコマンドとtracertコマンドを使用して、TCPポート80に到達できるかどうかを確認します。 詳細については、「インスタンスをpingできますが、インスタンスのポートをpingできない場合の対処方法」をご参照ください。
インスタンスの帯域幅が十分かどうかを確認します。
詳細については、「Windowsインスタンスの帯域幅使用率またはCPU使用率が高い、または100% に達した場合の対処方法」をご参照ください。
インスタンスの帯域幅が不十分な場合は、帯域幅をアップグレードします。 詳細については、以下をご参照ください。 帯域幅設定の変更
利用できないwebサービス
Windowsインスタンスに接続します。
詳細については、「接続方法」をご参照ください。
次のいずれかの方法を使用して、webサービスのログを表示します。
方法1: ログフォルダ内のログを表示します。
Windows Server 2008 R2以降では、webサービスログは
C:\inetpub\logs\LogFiles
パスに格納されます。方法2: インターネットインフォメーションサービス (IIS) マネージャーを使用します。
> Windows管理ツール > インターネットインフォメーションサービス (IIS) マネージャを選択します。
[既定のWebサイト] ページの [IIS] セクションで、[ログ] をクリックします。 次に、[操作] 列の [探索] をクリックします。
[ログ] ページで、webサービスログがインスタンスに保存されている実際のパスにディレクトリを設定し、パスをエクスプローラーにコピーしてから、
[Enter]
キーを押します。ファイルエクスプローラでログフォルダを表示できます。
タスクマネージャでインスタンスの動作ステータスを表示して、異常なプロセスを特定します。
デスクトップを右クリックし、[タスクマネージャ] を選択します。
[プロセス] タブをクリックします。
タスクマネージャでプロセスのCPU使用率とメモリ使用率を確認し、異常なプロセスを特定できます。
ECSコンソールでインスタンスのモニタリングデータを表示します。
詳細については、「ECSインスタンスのモニタリング情報の表示」をご参照ください。
インスタンスに十分なCPUおよびメモリリソースがあるかどうかを確認します。 インスタンスのCPUまたはメモリリソースが不足している場合は、「Windowsインスタンスの帯域幅使用率またはCPU使用率が高い、または100% に達した場合の対処方法」を実行します。.
インスタンスの帯域幅が十分かどうかを確認します。 インスタンスの帯域幅が不十分な場合は、帯域幅をアップグレードします。 詳細については、以下をご参照ください。 帯域幅設定の変更
インスタンスでポート80に確立されているTCP接続の数が上限を超えているかどうかを確認します。
コマンドプロンプトを起動します。
デスクトップの左下隅にあるアイコンをクリックし、アイコンをクリックします。
検索ボックスに
cmd
と入力します。[コマンドプロンプト] をクリックします。
コマンドプロンプトウィンドウにアクセスします。
次のコマンドを順番に実行して、さまざまな状態のTCP接続の数を確認します。
netstat -n |find /i "time_wait" /c netstat -n |find /i "close_wait" /c netstat -n |find /i "established" /c
デフォルトでは、ポート49152からポート65535の範囲の16,384の動的ポートが使用可能です。
CLOSE_WAIT
状態のTCP接続の数が動的ポートの数に近い場合、CLOSE_WAIT
状態の多数のTCP接続は閉じられません。 次の手順に進み、TcpTimedWaitDelayレジストリキーの値を減らします。 TcpTimedWaitDelayレジストリキーは、TCP接続が終了する前に、TCP接続がTIME_WAIT状態にとどまる時間の長さを決定します。レジストリエディターを起動します。
デスクトップの左下隅にあるアイコンをクリックし、アイコンをクリックします。
検索ボックスに
regedit
と入力します。regeditをクリックします。
[レジストリエディター] ウィンドウを開きます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
パスを参照し、TcpTimedWaitDelay
キーを10進値30
に設定します。TcpTimedWaitDelay
キーが存在しない場合は、次の操作を実行してキーを作成し、その値を変更します。レジストリエディタウィンドウの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
パスで、右側のウィンドウの空白領域を右クリックし、[新規]> [DWORD (32ビット) 値] を選択します。TcpTimedWaitDelay
を入力し、Enter
キーを押します。TcpTimedWaitDelay
を右クリックし、[変更] を選択します。表示されるダイアログボックスで、Decimalを選択し、value dataフィールドの値を
30
に変更します。[OK] をクリックします。