Perché non riesco a connettermi a un sito Web ospitato sulla mia istanza EC2?
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 sarà possibile connettersi 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 del problema.
Soluzione
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di 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, completa i seguenti 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.
- Se viene visualizzato un errore di kernel panic, consulta la sezione Perché viene visualizzato un errore "Kernel panic" dopo aver aggiornato il kernel o riavviato la mia istanza EC2 Linux?
- Se i log di sistema contengono errori di avvio, consulta la sezione I controlli dello stato delle istanze sulla mia istanza Linux EC2 hanno esito negativo a causa di problemi del sistema operativo. In che modo posso risolvere il problema?
Controlla il gruppo di sicurezza dell'istanza e la configurazione ACL di rete
- Assicurati che il gruppo di sicurezza associato all'istanza e l'ACL di rete consentano il traffico sulle porte 80 e 443.
- Assicurati che la tabella di routing nella sottorete dell'istanza disponga di un percorso predefinito verso un gateway Internet.
Verifica che l'istanza abbia la configurazione DNS corretta
- Se il tuo sito Web utilizza il servizio DNS Route 53, verifica di aver configurato correttamente i record DNS.
- Assicurati che all'istanza sia assegnato un indirizzo IP elastico. Se interrompi e avvii l'istanza, l'indirizzo IP elastico è ancora associato all'istanza.
- Assicurati di mappare l'indirizzo IP pubblico o l'indirizzo IP elastico a un record A.
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 potranno connettersi al sito Web.
Per verificare se il sito Web è in esecuzione in locale, esegui questo comando dal sito Web che ospita l'istanza EC2:
curl https://localhost
-oppure-
curl http://localhost:443
-
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)
-
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 il seguente comando:
$ sudo systemctl restart apache2
-
Verifica che il server Web sia attualmente in esecuzione:
Per i sistemi REHL o CentOS, esegui il seguente 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 il seguente 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 ]
-
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 il seguente comando:$ sudo netstat -tulpn | grep httpd tcp 0 0 :::80 :::* LISTEN 2961/httpd
Per i sistemi Debian o Ubuntu, esegui il seguente comando:
$ sudo netstat -tulpn | grep apache2 tcp6 0 0 :::80 :::* LISTEN 2741/apache2
-
Verifica lo stato dei firewall a livello di sistema operativo. Se 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
Di seguito sono riportati alcuni esempi di risultati riusciti:
Listen *:80
-oppure-
Listen *:443
Amazon Linux, CentOS e RHEL
-
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
-
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
-
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
-
Esegui il comando seguente per verificare che firewalld sia in esecuzione:
$ sudo firewall-cmd --state running
-
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:
-
Esegui il comando seguente per verificare la presenza di un firewall UFW:
$ sudo ufw status verbose Status: active
-
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. Questo percorso potrebbe cambiare a seconda della configurazione del server. Di seguito sono riportati i percorsi predefiniti dei log del server Web:
- 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?
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 2 anni fa