Pourquoi ne puis-je pas me connecter à un site Web hébergé sur mon instance EC2 ?

Lecture de 9 minute(s)
0

Je ne parviens pas à me connecter à un site Web public hébergé sur mon instance Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

Pour résoudre une erreur de site Web inaccessible, vérifiez que les paramètres de configuration de votre instance EC2 sont corrects. Par exemple, si votre instance ne dispose pas des configurations DNS appropriées, vous ne pourrez pas vous connecter à un site Web hébergé sur cette instance.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.

Utilisez SSH ou SSM Session Manager pour vous connecter à l'instance. Si aucune méthode n'est disponible, utilisez la console série EC2 pour vous connecter aux instances créées sur le système Nitro.

Vérifier que l’instance est en cours d’exécution et transmet bien les deux vérifications d’état

Vérifiez que l’instance est en cours d'exécution dans la console Amazon EC2. Si vous rencontrez un problème de vérification d’état, suivez les étapes décrites dans la section Pourquoi mon instance Linux EC2 est-elle inaccessible et ses vérifications d'état échouent-elles ? Vérifiez que l’instance démarre correctement. Pour plus d'informations, consultez la section Sortie de la console d'instance ou Capturer un instantané d'une instance inaccessible.

Vérifiez que les journaux système de l’instance ne contiennent pas d’erreurs de démarrage.

Pour vérifier les erreurs de démarrage, appliquez les méthodes suivantes :

Vérifier la configuration du groupe de sécurité de l'instance et de l'ACL réseau

Utilisez les méthodes suivantes pour vérifier la configuration de votre instance :

Vérifier que la configuration DNS de l’instance est correcte

Utilisez les méthodes suivantes pour vérifier la configuration de votre instance :

Vérification du bon fonctionnement du serveur Web et qu’aucun pare-feu au niveau du système d’exploitation ne bloque l’accès aux ports

Les ports réseau sont les points de terminaison de communication auxquels les différents services envoient des demandes. Ces demandes incluent les demandes de connexion au site Web des utilisateurs. Les serveurs Web écoutent le trafic HTTP sur le port 80 et utilisent le port 443 pour le trafic chiffré avec TLS/SSL. Si le serveur Web ne fonctionne pas ou si les pare-feux bloquent ces ports, les utilisateurs ne peuvent pas se connecter à votre site Web. Procédez comme suit :

  1. Pour vérifier si le site Web s'exécute localement, exécutez la commande suivante depuis le site Web d'hébergement de l'instance EC2 :

    curl https://localhost

    -ou-

    curl http://localhost:443

    Remarque : Si vous rencontrez des problèmes lorsque vous utilisez curl, vérifiez l’existence éventuelle de problèmes avec le serveur d'hébergement Web de l'instance. Vérifiez également la configuration de votre application dans l'instance.
    Connectez-vous à votre instance à l'aide de SSH, de SSM Session Manager ou de la console série EC2.

  2. Vérifiez l'état du service du serveur Web.
    Pour les systèmes RHEL, CentOS, Fedora et Amazon Linux, exécutez la commande systemctl status httpd pour vérifier l'état du serveur Web. La commande renvoie des informations indiquant que le serveur Web est inactif :

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

    Pour les systèmes Debian ou Ubuntu, exécutez la commande systemctl status apache2 pour vérifier l’état du serveur Web. Le serveur Web doit écouter sur le port 80 ou 443. La commande renvoie des informations indiquant que le serveur Web est inactif :

    $ sudo systemctl status apache2.service
    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)
  3. Pour démarrer le serveur Web et activer le service afin qu'il se lance au démarrage, exécutez les commandes suivantes :
    Pour les systèmes RHEL, CentOS, Fedora et Amazon Linux :

    $ sudo systemctl start httpd; sudo systemctl enable httpd

    Pour les systèmes Debian ou Ubuntu :

    $ sudo systemctl start apache2; sudo systemctl enable apache2
  4. Vérifiez que le service du serveur Web est en cours d'exécution et activé :
    Pour les systèmes RHEL, CentOS, Fedora et Amazon Linux, exécutez la commande suivante :

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

    Pour les systèmes Debian ou Ubuntu, exécutez la commande suivante :

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

    Remarque : Pour les anciens systèmes Linux exécutant SystemV, exécutez la commande suivante pour vérifier l'état du serveur Web.
    Pour les systèmes Debian ou Ubuntu, vous devez remplacer httpd par apache2 :

    $ sudo service httpd statushttpd is stopped

    Pour redémarrer un service de serveur Web arrêté sur SystemV, exécutez la commande suivante :

    $ sudo service httpd start
    Starting httpd:                                            [  OK  ]
  5. Pour vérifier que le serveur Web écoute les demandes de connexion entrantes des utilisateurs sur le port 80 ou 443, exécutez la commande suivante :

    $ sudo netstat -tulpn | grep -iP 'httpd|apache2'
    tcp        0      0 :::80               :::*                     LISTEN
          2961/httpd

    Remarque : Si plusieurs interfaces sont en cours d'exécution, vérifiez que le serveur Web écoute toutes les adresses IP en exécutant la commande suivante :

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

    Voici des exemples de sorties :

    Listen *:80

    -ou-

    Listen *:443
  6. Vérifiez l'état des pare-feux au niveau du système d'exploitation. Si vous trouvez un pare-feu actif, assurez-vous qu'il autorise les requêtes sur les ports 80 et 443.
    (En option) Pour vérifier que les règles iptables bloquent les requêtes entrantes sur les ports 80 et 443, exécutez la commande suivante :

    $ 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

    La sortie de la commande IPTables précédente indique que seuls ICMP, localhost et le port 22/TCP (SSH) sont autorisés. Cela signifie que les connexions entrantes vers les ports 80/TCP et 443/TCP sont bloquées ou rejetées.
    Pour autoriser les ports 80 et 443 à accepter les requêtes de connexion HTTP et HTTPS entrantes, exécutez la commande suivante :

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

    La sortie suivante montre que la règle multiport est ajoutée aux ports de service du serveur Web, 80/TCP et 443/TCP.

    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

Pour Amazon Linux 2023, Amazon Linux 2 et RHEL 7 et versions ultérieures

Pour vérifier si le service firewalld est en cours d'exécution, exécutez la commande suivante :

$ sudo firewall-cmd --staterunning

Si le service firewalld est en cours d'exécution, exécutez les commandes suivantes pour autoriser les connexions sur les ports 80/TCP et 443/TCP. La dernière commande de l'exemple recharge le service pour appliquer les règles récemment ajoutées :

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

Pour les serveurs Debian et Ubuntu

Procédez comme suit :

  1. Pour vérifier la présence d'un pare-feu simplifié (UFW), exécutez la commande suivante :

    $ sudo ufw status verbose
    Status:  active
  2. Si un pare-feu UFW est en cours d'exécution, utilisez la commande suivante pour autoriser les requêtes de connexion entrantes sur les ports 80 et 443 :

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

Consultez les journaux des erreurs d'accès à votre serveur Web pour détecter tout problème. Les journaux du serveur Web se trouvent dans /var/log. Les emplacements des journaux du serveur Web par défaut sont les suivants :

  • Amazon Linux et RHEL : /var/log/httpd
  • Debian et Ubuntu : /var/log/apache2

Remarque : L'emplacement du journal de serveur Web dépend de la configuration de votre serveur.

Informations connexes

Comment puis-je résoudre les problèmes de connexions lentes à un site Web hébergé sur mon instance EC2 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois