¿Por qué no puedo conectarme a un sitio web alojado en mi instancia de EC2?

9 minutos de lectura
0

No puedo conectarme a un sitio web público alojado en mi instancia de Amazon Elastic Compute Cloud (Amazon EC2).

Breve descripción

Los sitios web que se ejecutan en una instancia de EC2 pueden estar inaccesibles por varios motivos. Para solucionar este problema, confirme si los parámetros de configuración de la instancia de EC2 son correctos. Por ejemplo, si la instancia no arranca correctamente o no tiene las configuraciones de DNS correctas, no podrá conectarse a ningún sitio web alojado en esa instancia.

Siga los pasos de este artículo para comprobar los ajustes de configuración de su instancia de EC2 y encontrar la causa principal de este problema.

Solución

Nota: Si se muestran errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Utilización de la consola serie de EC2 para Linux para solucionar problemas de los tipos de instancias basadas en Nitro

Si ha activado la consola serie de EC2 para Linux, puede utilizarla para solucionar problemas con los tipos de instancias basadas en Nitro compatibles. Puede acceder a la consola serie mediante ella misma o la AWS CLI. No necesita una conexión operativa para conectarse a la instancia cuando utilice la consola serie de EC2.

Antes de utilizar la consola serie para solucionar problemas, siga estos pasos:

  • Conceda acceso a la consola serie en el nivel de cuenta.
  • Cree políticas de AWS Identity and Access Management (IAM) que concedan acceso a sus usuarios de IAM.
  • Compruebe que su instancia incluya al menos un usuario con contraseña.

Comprobación de si la instancia se está ejecutando y supera ambas comprobaciones de estado

Asegúrese de que la instancia aparezca como «en ejecución» en la consola de Amazon EC2. Si la instancia no se está ejecutando o tiene otro problema con la comprobación de estado, siga los pasos que se indican en ¿Por qué mi instancia de EC2 de Linux no es accesible y no supera una o ninguna de las comprobaciones de estado?

Comprobación de si la instancia se inicia correctamente

Compruebe los registros del sistema de la instancia para ver si hay errores de arranque.

Comprobación de la configuración de la ACL de red y el grupo de seguridad de la instancia

Comprobación de si la instancia tiene la configuración de DNS correcta

Comprobación de si el servidor web está en ejecución y no hay firewalls en el nivel del sistema operativo que bloqueen el acceso a los puertos

Los puertos de red son los puntos de enlace para la comunicación a los que varios servicios envían solicitudes. Estas solicitudes incluyen solicitudes de conexión al sitio web de los usuarios. Los servidores web escuchan el tráfico HTTP en el puerto 80 y utilizan el puerto 443 para el tráfico cifrado con TLS/SSL. Si el servidor web no está en ejecución o los firewalls bloquean estos puertos, los usuarios no podrán conectarse al sitio web.

Para comprobar si el sitio web está en ejecución localmente, ejecute este comando desde el sitio web de alojamiento de instancias de EC2:

curl https://localhost

Alternativa:

curl http://localhost:443

1.    Conéctese remotamente a la instancia a través de SSH.

2.    Compruebe el estado del servidor web.

  • En el caso de los sistemas RHEL o CentOS, utilice el comando systemctl status httpd para comprobar el estado del servidor web. El comando devuelve información que indica que el servidor web está inactivo:
$ 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)
  • En el caso de los sistemas Debian o Ubuntu, utilice el comando systemctl status httpd para comprobar el estado del servidor web. El servidor web debe estar escuchando en el puerto 80 o 443. El comando devuelve información que indica que el servidor web está inactivo:
$ 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.    Para reiniciar el servidor web, ejecute este comando:

  • En el caso de sistemas REHL o CentOS:
$ sudo systemctl restart httpd
  • En el caso de sistemas Debian o Ubuntu, ejecute este comando:
$ sudo systemctl restart apache2

4.    Compruebe que el servidor web se encuentre en ejecución en estos momentos:

  • En el caso de sistemas REHL o CentOS, ejecute este 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
  • En el caso de sistemas Debian o Ubuntu, ejecute este 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: En sistemas Linux más antiguos que ejecuten SystemV, ejecute este comando para comprobar el estado del servidor web.
Para los sistemas Debian o Ubuntu, debe reemplazar httpd por apache2:

$ sudo service httpd status
httpd is stopped

Para reiniciar un servidor web detenido en SystemV, ejecute este comando:

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

5.    Ejecute este comando para confirmar si el servidor web escucha las solicitudes de conexión de entrada de los usuarios en los puertos 80 o 443:

  • En el caso de sistemas REHL o CentOS, ejecute este comando:
$ sudo netstat -tulpn | grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      2961/httpd
  • En el caso de sistemas Debian o Ubuntu, ejecute este comando:
$ sudo netstat -tulpn | grep apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2741/apache2

6.    Verifique el estado de los firewalls en el nivel del sistema operativo. Si encuentra un firewall activo, asegúrese de que permita solicitudes en los puertos 80 y 443.

Nota: Si hay varias interfaces en ejecución, ejecute este comando para confirmar si el servidor web escucha en todas las IP:

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

Estos son algunos ejemplos de resultados satisfactorios:

Listen *:80

Alternativa:

Listen *:443

Amazon Linux, CentOS y RHEL

1.    Ejecute este comando para comprobar si las reglas de iptables bloquean las solicitudes de entrada en los puertos 80 y 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.    Ejecute este comando para permitir que el puerto 80 acepte las solicitudes de conexión HTTP de entrada:

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

3.    Ejecute este comando para permitir que el puerto 443 acepte las solicitudes de conexión HTTPS de entrada:

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

Amazon Linux 2023, Amazon Linux 2, RHEL 7 y versiones posteriores

1.    Ejecute este comando para comprobar que firewalld esté en ejecución:

$ sudo firewall-cmd --state
running

2.    Si se está ejecutando firewalld, ejecute estos comandos para configurarlo de manera que permita conexiones en los puertos 80 y 443. El último comando de este ejemplo vuelve a cargar el servicio para que las nuevas reglas surtan efecto:

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

Servidores Debian y Ubuntu

1.    Ejecute este comando para comprobar si hay un firewall de UFW:

$ sudo ufw status verbose
Status: active

2.    Si se está ejecutando UFW, utilice este comando para permitir las solicitudes de conexión de entrada en los puertos 80 y 443:

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

Consulte los registros de errores de acceso a su servidor web para ver si hay problemas. Los registros del servidor web se encuentran en /var/log. Esta ubicación puede cambiar según la configuración del servidor. Estas son las ubicaciones de registro del servidor web predeterminadas:

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

Información relacionada

¿Cómo soluciono los problemas de conexión lenta a un sitio web alojado en mi instancia de EC2?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años