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

Per risolvere un errore relativo a un sito web non raggiungibile, verifica che le impostazioni di configurazione dell'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.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Utilizza SSH o il Gestore di sessioni SSM per connetterti all'istanza. Se nessuno dei due metodi è disponibile, utilizza la console seriale EC2 per connetterti alle istanze create sul sistema Nitro.

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

Assicurati che l'istanza sia in esecuzione nella console Amazon EC2. Se riscontri un problema con il controllo dello stato, segui i passaggi in Perché la mia istanza Linux EC2 è irraggiungibile e non supera i controlli di stato? Verifica che l'istanza si avvii correttamente. Per ulteriori informazioni, consulta Output della console dell'istanza o Acquisizione di uno screenshot di un'istanza irraggiungibile.

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

Utilizza i seguenti metodi per verificare la presenza di errori di avvio:

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

Utilizza i seguenti metodi per verificare la configurazione dell'istanza:

Verifica che l'istanza abbia la configurazione DNS corretta

Utilizza i seguenti metodi per verificare la configurazione dell'istanza:

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. Completa i seguenti passaggi:

  1. Per verificare se il sito web è in esecuzione in locale, esegui il seguente comando dal sito web che ospita l'istanza EC2:

    curl https://localhost

    -oppure-

    curl http://localhost:443

    Nota: se riscontri problemi quando utilizzi il comando curl, verifica se sono presenti problemi con il server di web hosting dell'istanza. Inoltre, controlla la configurazione dell'applicazione nell'istanza.
    Connettiti all'istanza utilizzando SSH, il Gestore di sessioni SSM o la console seriale EC2.

  2. Controlla lo stato del servizio del server web.
    Per i sistemi RHEL, CentOS, Fedora e Amazon Linux, esegui 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.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, utilizza il comando systemctl status apache2 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.service
    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)
  3. Per avviare il server web e attivare il servizio in modo che parta sempre all'avvio, esegui i seguenti comandi:
    Per i sistemi RHEL, CentOS, Fedora e Amazon Linux:

    $ sudo systemctl start httpd; sudo systemctl enable httpd

    Per i sistemi Debian o Ubuntu:

    $ sudo systemctl start apache2; sudo systemctl enable apache2
  4. Verifica che il servizio del server web sia in esecuzione e attivato:
    Per i sistemi RHEL, CentOS, Fedora e Amazon Linux, esegui il seguente comando:

    $ sudo systemctl status httpd.service
    The Apache HTTP ServerLoaded: loaded (/usr/lib/systemd/system/httpd.service;
    enabled; vendor preset: disabled)Active: active (running)

    Per i sistemi Debian o Ubuntu, esegui il seguente comando:

    $ sudo systemctl status apache2.service
    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)Active: active (running)

    Nota: per i sistemi Linux su cui è in esecuzione SystemV, esegui il seguente comando per controllare lo stato del server web.
    Per i sistemi Debian o Ubuntu, devi sostituire httpd con apache2:

    $ sudo service httpd statushttpd is stopped

    Per riavviare un server web arrestato su SystemV, esegui il seguente comando:

    $ sudo service httpd start
    Starting httpd:                                            [  OK  ]
  5. Per verificare che il server web sia in ascolto sulla porta 80 o 443 per richieste di connessione in entrata dagli utenti, esegui il seguente comando:

    $ sudo netstat -tulpn | grep -iP 'httpd|apache2'
    tcp        0      0 :::80               :::*                     LISTEN
          2961/httpd

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

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

    Di seguito sono riportati alcuni esempi di output:

    Listen *:80

    -oppure-

    Listen *:443
  6. Verifica lo stato dei firewall a livello di sistema operativo. Se un firewall è attivo, assicurati che consenta richieste sulle porte 80 e 443.
    (Facoltativo) Per controllare che le regole iptables blocchino le richieste in entrata sulle porte 80 e 443, esegui il seguente comando:

    $ sudo iptables -vnL
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
       35 10863 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

    L'output del precedente comando IPTables mostra che sono consentiti solo ICMP, localhost e la porta 22/TCP (SSH). Ciò significa che le connessioni in entrata sulle porte 80/TCP e 443/TCP vengono bloccate o rifiutate.
    Per consentire alle porte 80 e 443 di accettare richieste di connessione HTTP e HTTPS in entrata, esegui il seguente comando:

    $ iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

    L'output di seguito mostra che la regola multi-porta viene aggiunta alle porte del servizio del server web, 80/TCP e 443/TCP.

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
      486  104K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

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

Per verificare se il servizio firewalld è in esecuzione, esegui il seguente comando:

$ sudo firewall-cmd --staterunning

Se il servizio firewalld è in esecuzione, esegui i seguenti comandi per consentire connessioni sulle porte 80/TCP e 443/TCP. L'ultimo comando dell'esempio ricarica il servizio per rendere effettive le nuove regole aggiunte:

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

Per server Debian e Ubuntu

Completa i seguenti passaggi:

  1. Per verificare la presenza di un firewall semplice (UFW), esegui il seguente comando:

    $ sudo ufw status verbose
    Status:  active
  2. Se è in esecuzione un UFW, utilizza il seguente comando per consentire richieste di connessione in entrata sulle porte 80/TCP 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 individuare eventuali problemi. I log del server web si trovano in /var/log. 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

Nota: il percorso del log del server web dipende dalla configurazione del server.

Informazioni correlate

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

AWS UFFICIALE
AWS UFFICIALEAggiornata 8 mesi fa