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

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 pourrez pas vous connecter aux sites Web hébergés sur cette instance.

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

Résolution

Remarque : si des erreurs surviennent lors de l’exécution des commandes de l’interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente de l’interface.

Utilisation de l’EC2 Serial Console pour Linux pour résoudre les problèmes liés aux types d’instances basés sur 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’instances basés sur Nitro pris en charge. Vous pouvez également accéder à la console série à l’aide de l’interface de la ligne de commande AWS (AWS CLI). Vous n’avez pas besoin d’avoir une connexion active pour vous connecter à votre instance lorsque vous utilisez EC2 Serial Console.

Avant d’utiliser la console série pour le dépannage :

  • Accordez l’accès à la console série au niveau du compte
  • Créez des politiques AWS Identity and Access Management (IAM) accordant l’accès à vos utilisateurs IAM.
  • Vérifiez que votre instance inclut au moins un utilisateur utilisant un mot de passe.

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

Vérifiez que l’instance est répertoriée comme étant 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 lié à la vérification de l’état, suivez les instructions de la page Pourquoi mon instance Linux EC2 est-elle inaccessible et échoue-t-elle à l’une de ses vérifications d’état ou aux deux ?

Vérification du démarrage de l’instance

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

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

Vérification de la configuration DNS de l’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.

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.    Vérifiez l’état du serveur Web.

  • Pour les systèmes RHEL ou CentOS, utilisez 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
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, utilisez la commande systemctl status httpd 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
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: inactive (dead)

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

  • Pour les systèmes REHL ou CentOS :
$ sudo systemctl restart httpd
  • Pour les systèmes Debian ou Ubuntu, exécutez cette commande :
$ sudo systemctl restart apache2

4.    Vérifiez que le serveur Web est en cours d’exécution :

  • Pour les systèmes REHL ou CentOS, exécutez cette commande :
$ 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
  • Pour les systèmes Debian ou Ubuntu, exécutez cette commande :
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: 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 cette commande pour vérifier l’état du serveur Web.
Pour les systèmes Debian ou Ubuntu, vous devez remplacer httpd par apache2 :

$ sudo service httpd status
httpd is stopped

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

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

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

  • Pour les systèmes REHL ou CentOS, exécutez cette commande :
$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd
  • Pour les systèmes Debian ou Ubuntu, exécutez cette commande :
$ sudo netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2741/apache2

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 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 exécutant 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.    Exécutez 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.    Exécutez 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.    Exécutez 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 2023, Amazon Linux 2 et RHEL 7 et versions ultérieures

1.    Exécutez 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, exécutez 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 afin que les nouvelles règles puissent prendre 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.    Exécutez cette commande pour vérifier la présence d’un pare-feu UFW :

$ sudo ufw status verbose
Status: active

2.    Si un pare-feu 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)

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. Cet emplacement peut changer en fonction de la configuration de votre serveur. Voici les emplacements des journaux du serveur Web par défaut :

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

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 2 ans