自分のウェブサイトにアクセスできません。Elastic Load Balancing (ELB) を使用して、エンドユーザーが自分のウェブサイトにアクセスできない理由を理解するにはどうすればよいですか?
簡単な説明
ウェブサイトにアクセスできない理由はいくつかあります。トラブルシューティングの最適な方法を見つけるには、まず次の質問に答えます。
- ウェブサイトにアクセスできず、ブラウザのデフォルトのタイムアウトページが表示されていますか?
- 問題は断続的に発生しますか?
- ページのロードで遅延が生じますか?
- ページに HTTP 5XX のようなエラーが表示されますか?
解決方法
DNS ルックアップと比較を行う
この問題が発生するドメインがロードバランサーノードの IP アドレスに正しく解決されていることを確認します。これにより、クライアントが試行している接続が正しい IP アドレスに送信されるようになります。
1. DNS ルックアップを実行します。
dig <affected domain>
または
nslookup <affected domain>
2. 比較のためにロードバランサーの DNS に対して DNS ルックアップを実行します。例:
dig lb-xxxxxxxxxx.us-east-1.elb.amazonaws.com
IP アドレスのリストが一致すれば、このチェックは成功します。ロードバランサーがスケールアウト状態の場合、1 つの DNS 応答で表示できる IP アドレスの数よりも多くの IP アドレスが存在する可能性があります。このユースケースでは、この比較では不十分な場合があります。すべての IP アドレスを取得するには、複数の DNS クエリを実行する必要がある場合があります。
バックエンド/ターゲットのステータスを確認する
バックエンド/ターゲットのヘルスチェックのステータスを確認します。ロードバランサーには、バックエンド/ターゲットのステータスをチェックするために使用するヘルスチェックが設定されています。ロードバランサーのタイプによっては、正常でないバックエンド/ターゲットがルーティングに影響する場合があります。タイプに応じて、ロードバランサーのヘルスをチェックします。
注意:
- クロスゾーンを有効または無効にすると、NLB と CLB でのリクエストのルーティング方法に影響する場合があります。
- ヘルスチェックは、トラフィックポート以外のポートでも設定できます。この場合、ターゲット/バックエンドが正常であっても、ターゲットは送信されたトラフィックに応答しない可能性があります。
ヘルスチェックでターゲットが異常と表示された場合は、ターゲット/バックエンドインスタンスでサービスが停止している可能性があります。または、ロードバランサーがターゲット/バックエンドインスタンスからレスポンスを取得できません。
ロードバランサーのノードに直接接続する
ロードバランサーのノードに直接接続します。このテストでは、以前に DNS 解決されたロードバランサーのすべての IP アドレスが到達可能かどうかを確認します。このテストでは、問題が特定のアベイラビリティーゾーン (AZ) のサブネットでのみ発生しているかどうかも確認します。
ロードバランサーの IP アドレスを書き留めてから、一度に 1 つずつこれらの IP アドレスへの接続を試みます。このテストでは、証明書の検証とホストヘッダーが原因でブラウザが機能しない場合があります。代わりに、curl ツールを使用して、次の形式でこのチェックを実行するのがベストプラクティスです。<protocol>、<ELB IP Address>、<port>、<path>、および <domain name> を実際のウェブセットアップの正しい値に置き換える必要があることに注意してください。
curl -lvk <protocol>://<ELB IP Address>:<port>/<path> -H "Host: <domain name>"
例:
Eg: curl -lvk https://3.2.1.1:443/test -H "Host: example.com"
応答が返ってきたら、それが予期されていた応答かエラーかをチェックします。応答に問題がない場合は、次の IP アドレスを確認します。
ロードバランサーにバックエンド/ターゲットの問題がないか確認する
ロードバランサーが使用するすべての IP アドレスへの接続を確認したら、ターゲット/バックエンドとのロードバランサーの通信ステータスを確認します。
1. まず、セキュリティグループ、ネットワーク ACL、ルーティングを確認します。
2. アクセスが許可されている場合は、ターゲット/バックエンドにログインします。アクセスを確立したら、次のコマンドを使用して、ウェブサービスが設定されたポートでリッスンしていることを確認します。「port」は、ターゲット/バックエンドのリッスンポートに置き換えます。これは、ターゲット/バックエンドをロードバランサーに登録するときに使用されるポートです。
Windows:
netstat -an | findstr "LISTEN" | findstr "port"
Linux:
netstat -an | grep LISTEN | grep "port"
3. 予想されるリッスンポートについて何も表示されない場合は、ウェブサービスがダウンしています。サービスステータスのトラブルシューティングを続行します。
4. ポートがリッスンしていることが応答で示された場合は、curl を使用してポートに接続してみます。<protocol> をリッスンしているアプリケーションサービスで置き換え、<port> を localhost ポートに置き換えます。
curl -lvk <protocol>://localhost:<port>
このコマンドから応答が得られた場合、ウェブサービスは機能しています。このテストフェーズでは、同じ Amazon Virtual Private Cloud (Amazon VPC) 内の別の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスから接続を開始できます。この接続試行がウェブサービスに到達したこと、およびウェブサービスから応答が得られたことを確認します。この応答には、ターゲット/バックエンドに接続しようとしたときにロードバランサーが受信した内容も表示されます。
関連情報
EC2 インスタンスでホストされている応答しないウェブサイトのトラブルシューティング方法を教えてください。