Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

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 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.

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 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
  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 il seguente comando:

    $ sudo systemctl restart apache2
  4. 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  ]
  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 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
  6. 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

  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 il comando seguente 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 il comando seguente 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. 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?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa