Comment résoudre les problèmes liés à un site Web qui ne répond pas hébergé sur mon instance EC2 ?

Dernière mise à jour : 06-05-2021

Je ne parviens pas à me connecter à mon 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. Vérifiez ce qui suit pour vous assurer que les paramètres de configuration de l'instance sont corrects :

  • Vérifiez que l'instance est en cours d'exécution et transmet les deux vérifications d'état.
  • Vérifiez que l'instance démarre correctement.
  • Vérifiez la configuration du groupe de sécurité et de la liste de contrôle d'accès (ACL) réseau de l'instance.
  • Vérifiez que l'instance possède la configuration DNS correcte.
  • Vérifiez 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.

Remarque : si vous avez activé 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. EC2 Serial Console vous aide à résoudre les problèmes de démarrage, de configuration réseau et de configuration SSH. EC2 Serial Console se connecte à votre instance sans qu'aucune connexion réseau ne soit nécessaire. Vous pouvez accéder à EC2 Serial Console à l'aide de la console Amazon EC2 ou de l'interface de ligne de commande AWS (AWS CLI).

Avant d'utiliser EC2 Serial Console, accordez-lui l'accès au niveau du compte. Créez ensuite des stratégies AWS Identity and Access Management (IAM) accordant l'accès à vos utilisateurs IAM. De même, chaque instance qui utilise EC2 Serial Console doit inclure au moins un utilisateur avec mot de passe. Si votre instance n'est pas accessible et que vous n'avez pas configuré l'accès à EC2 Serial Console, suivez les instructions de la méthode 2, 3 ou 4. Pour en savoir plus sur la configuration d'EC2 Serial Console pour Linux, consultez Configurer l'accès à EC2 Serial Console.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Solution

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.

Pour plus d'informations sur la résolution des problèmes de vérification d'état, voir Pourquoi mon instance EC2 Linux est-elle inaccessible et pourquoi une ou les deux vérifications d'état é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.

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 l'exemple suivant, 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, exécutez la commande suivante :

$ sudo systemctl restart  httpd

4.    Exécutez la commande suivante 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 la commande suivante 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 la commande suivante :

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

5.    Exécutez la commande suivante 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 :

Amazon Linux, CentOS et RHEL :

1.    Exécutez la commande suivante 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 la commande suivante 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 la commande suivante 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.    Exécutez la commande suivante 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 les commandes suivantes pour le configurer afin d’autoriser les connexions sur les ports 80 et 443. La dernière commande de l'exemple suivant 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.    Exécutez la commande suivante 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 la commande suivante 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 les 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. Les emplacements de journaux du serveur Web par défaut sont les suivants :

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

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


Besoin d'aide pour une question technique ou de facturation ?