EC2 インスタンスでホストされているウェブサイトに接続できないのはなぜですか?

所要時間4分
0

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストされている公開ウェブサイトに接続できません。

簡単な説明

EC2 インスタンスで実行されているウェブサイトは、いくつかの理由で到達不能になる可能性があります。この問題を解決するには、EC2 インスタンスの構成設定が正しいかどうかを確認します。例えば、インスタンスが正しく起動しないか、適切な DNS 設定がない場合、そのインスタンスでホストされているどのウェブサイトにも接続できません。

その場合は、この記事の手順に従い、EC2 インスタンスの構成設定を確認して、この問題の根本原因を特定してください。

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、使用しているのが最新の AWS CLI バージョンであることを確認してください

Linux 用の EC2 シリアルコンソールを使用して、Nitro ベースのインスタンスタイプのトラブルシューティングを行う

Linux 用の EC2 シリアルコンソールを有効にすると、サポートされている Nitro ベースのインスタンスタイプのトラブルシューティングを行うことができます。シリアルコンソールには、そのシリアルコンソールまたは AWS CLI からアクセスできます。EC2 シリアルコンソールを使用する際、インスタンスに接続するための有効な接続は必要ありません。

シリアルコンソールを使用してトラブルシューティングを行う前に、以下の手順を実行してください。

  • アカウントレベルでシリアルコンソールへのアクセス権限を認める
  • IAM ユーザーにアクセス権限を与える AWS Identity and Access Management (IAM) ポリシーを作成する
  • インスタンスに少なくとも 1 人のパスワードベースのユーザーが含まれていることを確認する

インスタンスが実行中で、両方のステータスチェックに合格していることを確認する

インスタンスが Amazon EC2 コンソールで実行中として表示されていることを確認します。インスタンスが実行されていないか、別のステータスチェックの問題がある場合は、「EC2 Linux インスタンスにアクセスできず、ステータスチェックの一方または両方が失敗するのはなぜですか?」の手順を実行してください。

インスタンスが正常に起動することを確認する

インスタンスのシステムログに起動エラーがないか確認します。

インスタンスのセキュリティグループとネットワーク ACL 設定を確認する

インスタンスの DNS 設定が正しいことを確認する

ウェブサーバーが稼働中で、ポートへのアクセスをブロックする OS レベルのファイアウォールがないことを確認する

ネットワークポートは、さまざまなサービスのリクエストの送信先になる通信エンドポイントです。これらのリクエストには、ユーザーのウェブサイト接続リクエストがあります。ウェブサーバーは、HTTP トラフィックをポート 80 でリッスンし、TLS/SSL で暗号化されたトラフィックにポート 443 を使用します。ウェブサーバーが稼働していない場合や、ファイアウォールでこれらのポートがブロックされている場合、ユーザーはウェブサイトに接続できません。

ウェブサイトがローカルで稼働しているかどうかを確認するには、ウェブサイトをホストしている EC2 インスタンス内から次のコマンドを実行します:

curl https://localhost

-or-

curl http://localhost:443

1.SSH 経由でインスタンスにリモート接続します

2.ウェブサーバーのステータスを確認します。

  • RHEL システムや CentOS システムの場合は、systemctl status httpd コマンドでウェブサーバーのステータスを確認します。このコマンドでは、ウェブサーバーが非アクティブであるという情報が返ります。
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
  • Debian システムまたは Ubuntu システムの場合は、systemctl status httpd コマンドでウェブサーバーのステータスを確認します。ウェブサーバーはポート 80 またはポート 443 でリッスンしている必要があります。このコマンドでは、ウェブサーバーが非アクティブであるという情報が返ります。
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: inactive (dead)

3.ウェブサーバーを再起動するために、次のコマンドを実行します。

  • REHL システムまたは CentOS システムの場合:
$ sudo systemctl restart httpd
  • Debian システムまたは Ubuntu システムの場合は、次のコマンドを実行します。
$ sudo systemctl restart apache2

4.ウェブサーバーが現在実行中であることを確認します。

  • REHL システムまたは CentOS システムの場合は、次のコマンドを実行します。
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2020-11-19 14:40:15 UTC; 42s ago
  • Debian システムまたは Ubuntu システムの場合は、次のコマンドを実行します。
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running)

**注:**SystemV を実行している古い Linux システムでは、次のコマンドを実行してウェブサーバーのステータスを確認します。
Debian システムまたは Ubuntu システムの場合は、httpdapache2に置き換える必要があります。

$ sudo service httpd status
httpd is stopped

次のコマンドを実行して、SystemV で停止しているウェブサーバーを再起動します。

$ sudo service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd:                                            [  OK  ]

5.次のコマンドを実行して、ウェブサーバーがユーザーからの受信接続リクエストをポート 80 またはポート 443 でリッスンしていることを確認します。

  • REHL システムまたは CentOS システムの場合は、次のコマンドを実行します。
$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd
  • Debian システムまたは Ubuntu システムの場合は、次のコマンドを実行します。
$ sudo netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2741/apache2

6.OS レベルのファイアウォールのステータスを確認します。アクティブなファイアウォールが見つかったら、ポート 80 とポート 443 でリクエストが許可されていることを確認します。

**注:**複数のインターフェースが実行されている場合は、次のコマンドを実行して、ウェブサーバーがすべての IP をリッスンしていることを確認します。

cat /etc/httpd/conf/httpd.conf  | grep Listen

成功した出力の例は以下のとおりです:

Listen *:80

-or-

Listen *:443

Amazon Linux、CentOS、RHEL

1.次のコマンドを実行して、iptables ルールがポート 80 とルート 443 で受信リクエストがブロックされることを確認します。

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

2.ポート 80 で受信 HTTP 接続リクエストが受け付けられるように次のコマンドを実行します。

$ sudo iptables -A INPUT -p tcp --dport 80 --syn -m conntrack --ctstate NEW -j ACCEPT

3.ポート 443 で受信 HTTPS 接続リクエストが受け付けられるように次のコマンドを実行します。

$ sudo iptables -A INPUT -p tcp --dport 443 --syn -m conntrack --ctstate NEW -j ACCEPT

Amazon Linux 2023、Amazon Linux 2、および RHEL 7 以降

1.次のコマンドを実行して、ファイアウォールが実行中であることを確認します。

$ sudo firewall-cmd --state
running

2.ファイアウォールが実行中の場合は、ポート 80 とポート 443 で接続が許可されるように次のコマンドを実行してファイアウォールを設定します。次の例の最後のコマンドでは、サービスがリロードされて新しいルールが有効になります。

$ sudo firewall-cmd --add-service=http --permanent
success
$ sudo firewall-cmd --add-service=https --permanent
success
$ sudo firewall-cmd --reload
success

Debian サーバーと Ubuntu サーバー

1.次のコマンドを実行して、UFW ファイアウォールを確認します。

$ sudo ufw status verbose
Status: active

2.UFW が実行中の場合は、次のコマンドを使用してポート 80 とポート 443 で受信された接続リクエストを許可します:

$ sudo ufw allow in 80/tcp
Rule added
Rule added (v6)
$ sudo ufw allow 443/tcp
Rule added
Rule added (v6)

ウェブサーバーのアクセスエラーログに問題がないか確認します。ウェブサーバーのログは /var/logにあります。この場所は、サーバーの設定によって変わる可能性があります。ウェブサーバーのログのデフォルトの場所は次のとおりです。

  • Amazon Linux および RHEL: /var/log/httpd
  • Debian および Ubuntu: /var/log/apache2

関連情報

EC2 インスタンスでホストされているウェブサイトへの接続が遅い場合のトラブルシューティング方法を教えてください。

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ