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

Dernière mise à jour : 16/05/2022

Je ne parviens pas à me connecter à un site Web public hébergé sur mon instance Amazon Elastic Compute Cloud (Amazon EC2). Comment puis-je résoudre ce problème ?

Brève description

Les sites Web exécutés sur une instance EC2 peuvent devenir inaccessibles pour plusieurs raisons. Pour résoudre ce problème, vérifiez que les paramètres de configuration de votre instance EC2 sont corrects. Par exemple, si votre instance ne démarre pas correctement ou ne possède pas les bonnes configurations DNS, vous ne pouvez pas vous connecter à un site Web hébergé sur cette instance.

Suivez les étapes de cet article pour vérifier les paramètres de configuration de votre instance EC2 et déterminer la source de ce problème.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis AWS Command Line Interface (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

Utiliser l'EC2 Serial Console pour Linux afin de résoudre les problèmes liés aux types d'instances Nitro

Si vous avez activé l'EC2 Serial Console pour Linux, vous pouvez l'utiliser pour résoudre les problèmes liés aux types d'instance Nitro pris en charge. Vous pouvez accéder à la Serial Console à l'aide de la Serial Console ou de l'AWS CLI. Vous n'avez pas besoin d'une connexion fonctionnelle pour vous connecter à votre instance lorsque vous utilisez l'EC2 Serial Console.

Avant d'utiliser la Serial Console pour le dépannage :

  • Accorder l'accès à la Serial Console au niveau du compte
  • Créer des politiques AWS Identity and Access Management (IAM) accordant l'accès à vos utilisateurs IAM
  • Vérifier que votre instance inclut au moins un utilisateur basé sur un mot de passe

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

Assurez-vous que l'instance est répertoriée comme « en cours d'exécution » dans la console Amazon EC2. Si votre instance n'est pas en cours d'exécution ou si vous rencontrez un autre problème de vérification d'état, suivez les étapes décrites dans Pourquoi mon instance Linux EC2 est-elle inaccessible et une ou les deux vérifications de son statut échouent-elles ?

Vérifier que l'instance démarre correctement

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

Vérifier que l'instance possède la configuration DNS correcte

Vérifier que le serveur Web est en cours d'exécution 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. notamment les demandes de connexion au site Web des utilisateurs. Les serveurs Web écoutent généralement le trafic HTTP sur le port 80 et utilisent le port 443 pour le trafic chiffré avec TLS/SSL. Si le serveur Web n'est pas en cours d'exécution ou si des pare-feu bloquent ces ports, les utilisateurs ne peuvent pas se connecter à votre site Web.

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

curl https://localhost

-ou-

curl http://localhost:443

1.    Connectez-vous à distance à l'instance via SSH.

2.    Exécutez la commande systemctl status httpd pour vérifier l'état du serveur Web. Le serveur Web doit être à l'écoute sur le port 80 ou le port 443. Dans cet exemple, la commande renvoie des informations indiquant que le serveur Web est inactif.

$ 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)

3.    Pour redémarrer le serveur Web, utilisez cette commande :

$ sudo systemctl restart  httpd

4.    Utilisez cette commande pour vérifier que le serveur Web est en cours d'exécution :

$ 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

Remarque : pour les anciens systèmes Linux exécutant SystemV, utilisez cette commande pour vérifier l'état du serveur Web :

$ sudo service httpd status
httpd is stopped

Pour redémarrer un serveur Web arrêté sur SystemV, utilisez cette commande :

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

5.    Utilisez cette commande pour vérifier que le serveur Web écoute sur le port 80 ou le port 443 les demandes de connexion entrantes des utilisateurs :

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

6.    Vérifiez l'état des pare-feu au niveau du système d'exploitation. Si vous trouvez un pare-feu actif, assurez-vous qu'il autorise les demandes sur les ports 80 et 443.

Remarque : si plusieurs interfaces sont en cours d'exécution, vérifiez que le serveur Web écoute toutes les adresses IP en utilisant cette commande :

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

Voici des exemples de sorties réussies :

Listen *:80

-ou-

Listen *:443

Amazon Linux, CentOS et RHEL :

1.    Utilisez cette commande pour vérifier que les règles iptables bloquent les demandes entrantes sur les ports 80 et 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.    Utilisez cette commande pour autoriser le port 80 à accepter les demandes de connexion HTTP entrantes :

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

3.    Utilisez cette commande pour autoriser le port 443 à accepter les demandes de connexion HTTPS entrantes :

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

Amazon Linux 2 et RHEL 7 et versions ultérieures :

1.    Utilisez cette commande pour vérifier que firewalld est en cours d'exécution :

$ sudo firewall-cmd --state
running

2.    Si firewalld est en cours d'exécution, utilisez ces commandes pour le configurer afin d'autoriser les connexions sur les ports 80 et 443. La dernière commande de cet exemple recharge le service pour que les nouvelles règles prennent effet :

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

Serveurs Debian et Ubuntu :

1.    Utilisez cette commande pour vérifier la présence d'un pare-feu UFW :

$ sudo ufw status verbose
Status: active

2.    Si UFW est en cours d'exécution, utilisez cette commande pour autoriser les demandes 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)

Vérifiez vos journaux d'erreurs d'accès au serveur Web pour détecter les problèmes. Les journaux du serveur Web se trouvent généralement dans /var/log. Cet emplacement peut changer en fonction de la configuration de votre serveur. Voici les emplacements de journaux du serveur Web par défaut :

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

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?