スキップしてコンテンツを表示

EC2 インスタンスでホストされているウェブサイトに接続できない理由を教えてください。

所要時間4分
0

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

簡単な説明

ウェブサイトにアクセスできない問題を解決するには、EC2 インスタンスのウェブサイト設定が正しく設定されていることを確認してください。インスタンスのウェブサーバーに設定ミスがある場合、そのインスタンスでホストされているすべてのウェブサイトへのアクセスがブロックされます。

解決策

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

Amazon EC2 コンソールを確認し、インスタンスが実行されているかどうかを検証します。ステータスチェックに関する問題のトラブルシューティング方法については、「EC2 Linux インスタンスに到達できず、ステータスチェックに合格できない理由を知りたいです」を参照してください。

さらに、インスタンスコンソールの出力インスタンスのスクリーンショットを参照し、インスタンスが正しく起動しているかどうかを確認します。

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

次ののインスタンス設定を確認します。

  • 関連するセキュリティグループとネットワークアクセスコントロールリスト (ネットワーク ACL) では、ポート 80 と 443 でトラフィックを許可している。
  • インスタンスのサブネット内のルートテーブルには、インターネットゲートウェイへのデフォルトルートが存在する。

Web サイトの DNS 設定が適切であることを確認する

ウェブサイトにおける次の DNS 設定を確認します。

Web サーバーが稼働しており、OS ファイアウォールがポートへのアクセスをブロックしていないことを確認します。

ネットワークポートの設定とウェブサーバーを確認するには、次の手順を実行します。

  1. SSH または、AWS Systems Manager の機能である Session Manager を使用してインスタンスに接続します。SSH または Session Manager を使用して AWS Nitro System 上にビルドしたインスタンスに接続できない場合は、EC2 シリアルコンソールを使用してください。

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

    curl https://localhost

    または、

    curl http://localhost:443

    注: curl の使用時に問題が発生した場合は、インスタンスのウェブサーバーとアプリケーション設定に問題がないかどうかを確認してください。

  3. ウェブサーバーのサービスステータスを確認するには、実行しているオペレーティングシステム (OS) に応じて次のコマンドを実行します。
    Red Hat Enterprise Linux (RHEL)、CentOS、Fedora、Amazon Linux:

    sudo systemctl status httpd.service

    出力例:

    The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset:
    disabled)
    Active: inactive (dead)

    Debian、Ubuntu:

    sudo systemctl status apache2.service

    出力例:

    The Apache HTTP Server
    Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)

    コマンド出力に inactive (dead) ステータスがないかを確認します。
    Linux システムが System V を実行している場合は、次のコマンドを実行してウェブサーバーのステータスを確認します。

    sudo service httpd status

    注: Debian または Ubuntu を実行している場合は、httpdapache2 に置き換えてください。
    出力例:

    httpd is stopped
  4. ウェブサーバーを起動し、起動時にサービスが開始するように設定するには、使用している OS に応じて次のコマンドを実行します。
    RHEL、CentOS、Fedora、Amazon Linux:

    sudo systemctl start httpd; sudo systemctl enable httpd

    Debian または Ubuntu:

    sudo systemctl start apache2; sudo systemctl enable apache2
  5. ウェブサーバーサービスが実行中であり、有効化されていることを確認するには、使用している OS に応じて次のコマンドを実行します。
    RHEL、CentOS、Fedora、Amazon Linux:

    sudo systemctl status httpd.service

    出力例:

    The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service;
    enabled; vendor preset: disabled)
    Active: active (running)

    Debian または Ubuntu:

    sudo systemctl status apache2.service

    出力例:

    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service;
    enabled; vendor preset: enabled)
    Active: active (running)

    System V 上で稼働しているシステムにおいて、停止したウェブサーバーサービスを開始するには、次のコマンドを実行します。

    sudo service httpd start

    出力例:

    Starting httpd:                                            [  OK  ]
  6. ウェブサーバーがインバウンドのユーザー接続リクエストをリッスンしていることを確認するには、次のコマンドを実行します。

    sudo netstat -tulpn|grep -i :80
    tcp6       0      0 :::80                   :::*                    LISTEN      11993/httpd

    注: 上記のコマンドを 2 回実行します。2 回目には、80443 に置き換えます。ウェブサーバーは、HTTP トラフィックをポート 80 でリッスンし、TLS/SSL で暗号化されたトラフィックをポート 443 でリッスンします。
    複数のインターフェイスを実行している場合は、次のコマンドを実行して、ウェブサーバーがすべての IP アドレスをリッスンしていることを確認します。

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

    出力例:

    Listen *:80
    Listen *:443
  7. OS のファイアウォールを使用している場合は、ポート 80 とポート 443 でリクエストを許可していることを確認します。

  8. (オプション) iptables ルールがポート 80 と 443 でのインバウンドリクエストを許可していることを確認するには、次のコマンドを実行します。

    sudo iptables -vnL

    出力例:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
       35 10863 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

    上記の出力例では、ルールは Internet Control Message Protocol (ICMP)、ローカルホスト、およびポート 22/TCP (SSH) のみを許可しています。このルールは、TCP ポート 80 または 443 へのインバウンド接続をブロックします。

  9. iptables ルールでポート 80 と 443 がインバウンドの HTTP および HTTPS 接続リクエストを受け入れるように設定するには、次のコマンドを実行します。

    iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

    出力例:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
      486  104K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

AL2023、AL2、および RHEL 7 以降の設定を確認する

Amazon Linux 2023 (AL2023)、Amazon Linux 2 (AL2)、および RHEL インスタンスでは、次のコマンドを実行して firewalld サービスが実行中かどうかを確認します。

sudo firewall-cmd --state

出力例:

running

firewalld サービスが実行中の場合は、次のコマンドを実行してポート 80 および 443 での接続を許可します。

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

注: 以前にルールを追加した場合は、reload コマンドを実行するとサービスがリロードされ、ルールが有効化します。

各コマンドにおいて、出力が次の例のようになっていることを確認します。

success

Debian サーバーと Ubuntu サーバーの構成を確認する

次の手順を実行します。

  1. 簡易ファイアウォール (UFW) を確認するには、次のコマンドを実行します。

    sudo ufw status verbose

    出力例:

    Status:  active
  2. UFW を実行している場合は、次のコマンドを実行し、必要な TCP ポートでのインバウンド接続リクエストを許可します。
    TCP ポート 80:

    sudo ufw allow in 80/tcp

    TCP ポート 443:

    sudo ufw allow 443/tcp
  3. 各コマンドにおいて、出力が次の例のようになっていることを確認します。

    Rule added
    Rule added (v6)

追加のトラブルシューティングを行う場合は、/var/log にあるウェブサーバーのアクセスエラーログを参照し、問題が発生していないか確認します。次の、デフォルトのウェブサーバーログを参照します。

  • Amazon Linux と RHEL では、/var/log/httpd を使用してください。
  • Debian と Ubuntu では、/var/log/apache2 を使用してください。

注: ウェブサーバーログの場所は、サーバーの設定によって異なります。

関連情報

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

AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ