EC2 インスタンスでホストされているウェブサイトに接続できないのはなぜですか?
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 インスタンスにアクセスできず、ステータスチェックの一方または両方が失敗するのはなぜですか?」の手順を実行してください。
インスタンスが正常に起動することを確認する
インスタンスのシステムログに起動エラーがないか確認します。
- カーネルパニックエラーが表示される場合は、「カーネルをアップグレードした後や、EC2 Linux インスタンスを再起動すると、「カーネルパニック」エラーが表示されます。これを修正する方法を教えてください。」を参照してください。
- その他のオペレーティングシステムのエラーについては、「オペレーティングシステムの問題でインスタンスのステータスチェックに失敗した EC2 Linux インスタンスのトラブルを解決する方法を教えてください。」を参照してください。
インスタンスのセキュリティグループとネットワーク ACL 設定を確認する
- インスタンスに関連付けられているセキュリティグループとネットワーク ACL で、ポート 80 とポート 443 のトラフィックが許可されていることを確認します。
- インスタンスのサブネットのルートテーブルに、インターネットゲートウェイへのデフォルトルートがあることを確認します。
インスタンスの DNS 設定が正しいことを確認する
- ウェブサイトで Route 53 DNS サービスを使用している場合は、DNS レコードが正しく設定されていることを確認してください。
- インスタンスに Elastic IP アドレス が割り当てられていることを確認してください。インスタンスを停止して起動しても、Elastic IP アドレスはインスタンスに関連付けられたままになります。
- パブリック IP アドレスまたは Elastic IP アドレスが確実に A レコードにマッピングされることを確認してください。
ウェブサーバーが稼働中で、ポートへのアクセスをブロックする OS レベルのファイアウォールがないことを確認する
ネットワークポートは、さまざまなサービスのリクエストの送信先になる通信エンドポイントです。これらのリクエストには、ユーザーのウェブサイト接続リクエストがあります。ウェブサーバーは、HTTP トラフィックをポート 80 でリッスンし、TLS/SSL で暗号化されたトラフィックにポート 443 を使用します。ウェブサーバーが稼働していない場合や、ファイアウォールでこれらのポートがブロックされている場合、ユーザーはウェブサイトに接続できません。
ウェブサイトがローカルで稼働しているかどうかを確認するには、ウェブサイトをホストしている EC2 インスタンス内から次のコマンドを実行します:
curl https://localhost
-or-
curl http://localhost:443
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
-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
関連情報
関連するコンテンツ
- 質問済み 3年前lg...
- 質問済み 7ヶ月前lg...
- 質問済み 2ヶ月前lg...
- 質問済み 6年前lg...
- AWS公式更新しました 9ヶ月前
- AWS公式更新しました 2年前