Perché non riesco a connettermi a un sito Web ospitato sulla mia istanza EC2?

8 minuti di lettura
0

Non riesco a connettermi a un sito Web pubblico ospitato sulla mia istanza Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

I siti Web in esecuzione su un'istanza EC2 potrebbero diventare irraggiungibili per diversi motivi. Per risolvere questo problema,verifica che le impostazioni di configurazione sull'istanza EC2 siano corrette. Ad esempio, se l'istanza non si avvia correttamente o non dispone delle configurazioni DNS corrette, non puoi connetterti ad alcun sito Web ospitato su quell'istanza.

Segui i passaggi descritti in questo articolo per verificare le impostazioni di configurazione della tua istanza EC2 e trovare la causa principale di questo problema.

Risoluzione

Nota: se ricevi errori durante l'esecuzione dei comandi dell’Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente dell'Interfaccia della linea di comando AWS (AWS CLI).

Usa la Console seriale EC2 per Linux per risolvere i problemi relativi ai tipi di istanze basati su Nitro

Se hai attivato la Console seriale EC2 per Linux, puoi utilizzarla per risolvere i problemi relativi ai tipi di istanze basati su Nitro supportati. Puoi accedere alla console seriale utilizzando quest'ultima o l'Interfaccia della linea di comando AWS (AWS CLI). Per connettersi all'istanza quando si utilizza la console seriale EC2, non è necessaria una connessione funzionante.

Prima di utilizzare la console seriale per la risoluzione dei problemi, segui questi passaggi:

  • Concedi l'accesso alla console seriale a livello di account
  • Crea delle policy AWS Identity and Access Management (IAM) che concedono l'accesso ai tuoi utenti IAM
  • Verifica che la tua istanza non includa almeno un utente basato su password

Verifica che l'istanza sia in esecuzione e che superi entrambi i controlli di stato

Assicurati che l'istanza sia elencata come in esecuzione nella console Amazon EC2. Se la tua istanza non è in esecuzione o hai un altro problema con il controllo dello stato, segui i passaggi indicati nella sezione Perché la mia istanza EC2 Linux non è raggiungibile e non supera i controlli di stato?

Verifica che l'istanza si avvii correttamente

Controlla i log di sistema dell'istanza per verificare la presenza di errori di avvio.

Controlla il gruppo di sicurezza dell'istanza e la configurazione ACL di rete

Verifica che l'istanza abbia la configurazione DNS corretta

Verifica che il server Web sia in esecuzione e che non vi siano firewall a livello di sistema operativo che bloccano l'accesso alle porte

Le porte di rete sono gli endpoint di comunicazione a cui i vari servizi inviano richieste. Queste includono le richieste di connessione al sito Web degli utenti. I server Web ascoltano sulla porta 80 il traffico HTTP e utilizzano la porta 443 per il traffico crittografato con TLS/SSL. Se il server Web non è in esecuzione o i firewall bloccano queste porte, gli utenti non possono connettersi al tuo sito Web.

Per verificare se il sito Web sia in esecuzione in locale, esegui questo comando dal sito Web che ospita l'istanza EC2:

curl https://localhost

-oppure-

curl http://localhost:443

1.    Esegui la connessione remota all'istanza tramite SSH.

2.    Controlla lo stato del server Web.

  • Per i sistemi RHEL o CentOS, utilizza il comando systemctl status httpd per verificare lo stato del server Web. Il comando restituisce l'informazione che il server Web è inattivo:
$ 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)
  • Per i sistemi Debian o Ubuntu, usa il comando systemctl status httpd per controllare lo stato del server Web. Il server Web deve essere in ascolto sulla porta 80 o 443. Il comando restituisce l'informazione che il server Web è inattivo:
$ 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.    Per riavviare il server Web, esegui questo comando:

  • Per i sistemi REHL o CentOS:
$ sudo systemctl restart httpd
  • Per i sistemi Debian o Ubuntu, esegui questo comando:
$ sudo systemctl restart apache2

4.    Verifica che il server Web sia attualmente in esecuzione:

  • Per i sistemi REHL o CentOS, esegui questo comando:
$ 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
  • Per i sistemi Debian o Ubuntu, esegui questo comando:
$ sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running)

Nota: per i sistemi Linux meno recenti su cui è in esecuzione SystemV, esegui questo comando per verificare lo stato del server Web.
Per i sistemi Debian o Ubuntu, è necessario sostituire httpd con apache2:

$ sudo service httpd status
httpd is stopped

Per riavviare un server Web arrestato su SystemV, esegui questo comando:

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

5.    Esegui questo comando per verificare che il server Web sia in ascolto sulla porta 80 o 443 per le richieste di connessione in entrata degli utenti:

  • Per i sistemi REHL o CentOS, esegui questo comando:
$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd
  • Per i sistemi Debian o Ubuntu, esegui questo comando:
$ sudo netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2741/apache2

6.    Verifica lo stato dei firewall a livello di sistema operativo. Se trovi un firewall attivo, assicurati che consenta le richieste sulle porte 80 e 443.

Nota: se sono in esecuzione più interfacce, verifica che il server Web sia in ascolto su tutti gli IP eseguendo questo comando:

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

Ecco alcuni esempi di risultati corretti:

Listen *:80

-oppure-

Listen *:443

Amazon Linux, CentOS e RHEL

1.    Esegui questo comando per verificare che le regole di iptables blocchino le richieste in arrivo sulle porte 80 e 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.    Esegui questo comando per consentire alla porta 80 di accettare le richieste di connessione HTTP in entrata:

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

3.    Esegui questo comando per consentire alla porta 443 di accettare le richieste di connessione HTTPS in entrata:

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

Amazon Linux 2023, Amazon Linux 2 e RHEL 7 e versioni successive

1.    Esegui questo comando per verificare che firewalld sia in esecuzione:

$ sudo firewall-cmd --state
running

2.    Se firewalld è in esecuzione, esegui questi comandi per configurarlo in modo da consentire le connessioni sulle porte 80 e 443. L'ultimo comando in questo esempio ricarica il servizio in modo che le nuove regole abbiano effetto:

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

Server Debian e Ubuntu:

1.    Esegui questo comando per verificare la presenza di un firewall UFW:

$ sudo ufw status verbose
Status: active

2.    Se UFW è in esecuzione, usa questo comando per consentire le richieste di connessione in entrata sulle porte 80 e 443:

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

Controlla i log degli errori di accesso al server Web per eventuali problemi. I log del server Web si trovano in /var/log. Questa posizione potrebbe cambiare a seconda della configurazione del server. Queste sono le posizioni di registro del server Web predefinite:

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

Informazioni correlate

Come posso risolvere i problemi di connessione lenta a un sito Web ospitato sulla mia istanza EC2?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa