AWS re:Postを使用することにより、以下に同意したことになります 利用規約

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

所要時間4分
0

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストされているパブリックウェブサイトに接続できません。これを解決するにはどうすればよいですか?

簡単な説明

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

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

解決方法

注: AWS Command Line Interface (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
  • または -
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 システムでは、httpd を apache2 に置き換える必要があります。

$ 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
  • または -
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 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公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ