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

Descripción corta

Para resolver un error de sitio web inaccesible, compruebe que los ajustes de configuración de la instancia de EC2 son correctos. Por ejemplo, si la instancia no tiene las configuraciones de DNS correctas, no podrá conectarse a ningún sitio web alojado en esa instancia.

Resolución

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

Use SSH o SSM Session Manager para conectarse a la instancia. Si ninguno de los métodos está disponible, utilice la consola serie de EC2 para conectarse a las instancias integradas en Nitro System.

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

Asegúrese de que la instancia se ejecute en la consola de Amazon EC2. Si tiene algún 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? Compruebe si la instancia se inicia correctamente. Para obtener más información, consulte Resultados de la consola de instancias o Realización de una captura de pantalla de una instancia inaccesible.

Comprobación de los registros del sistema de la instancia para ver si hay errores de arranque.

Utilice los métodos siguientes para comprobar si hay errores de arranque:

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

Use los siguientes métodos para comprobar la configuración de la instancia:

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

Use los siguientes métodos para comprobar la configuración de la instancia:

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. Siga estos pasos:

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

    Nota: Si tiene problemas al usar curl, compruebe si hay problemas con el servidor de alojamiento web de la instancia. Además, compruebe la configuración de la aplicación en la instancia.
    Conéctese a la instancia mediante SSH, SSM Session Manager o consola serie de EC2.

  2. Compruebe el estado del servicio del servidor web.
    Para los sistemas RHEL, CentOS, Fedora y Amazon Linux, ejecute 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.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, ejecute el comando systemctl status apache2 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.service
    The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)
  3. Para iniciar el servidor web y activar el servicio para que se inicie al arrancar, ejecute los siguientes comandos:
    Para sistemas RHEL, CentOS, Fedora y Amazon Linux:

    $ sudo systemctl start httpd; sudo systemctl enable httpd

    Para sistemas Debian o Ubuntu:

    $ sudo systemctl start apache2; sudo systemctl enable apache2
  4. Verifique que el servicio de servidor web esté en ejecución y activado:
    Para los sistemas RHEL, CentOS, Fedora y Amazon Linux, ejecute el siguiente comando:

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

    En el caso de los sistemas Debian o Ubuntu, ejecute el siguiente comando:

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

    Nota: En sistemas Linux que ejecuten SystemV, ejecute el siguiente comando para comprobar el estado del servidor web.
    En el caso de los sistemas Debian o Ubuntu, debe sustituir httpd por apache2:

    $ sudo service httpd statushttpd is stopped

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

    $ sudo service httpd start
    Starting httpd:                                            [  OK  ]
  5. Para confirmar si el servidor web escucha las solicitudes de conexión de entrada de los usuarios en los puertos 80 o 443, ejecute el siguiente comando:

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

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

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

    Los siguientes son resultados de ejemplo:

    Listen *:80

    Alternativa:

    Listen *:443
  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.
    (Opcional) Para comprobar si las reglas de iptables bloquean las solicitudes de entrada en los puertos 80 y 443, ejecute el siguiente 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

    El resultado del comando IPTables anterior muestra que solo se permiten ICMP, localhost y el puerto 22/TCP (SSH). Esto significa que las conexiones entrantes a los puertos 80/TCP y 443/TCP están bloqueadas o rechazadas.
    Para permitir que los puertos 80 y 443 acepten solicitudes de conexión HTTP y HTTPS entrantes, ejecute el siguiente comando:

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

    El siguiente resultado muestra que la regla multipuerto se agrega a los puertos de servicio del servidor web, 80/TCP y 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

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

Para confirmar si el servicio firewalld se está ejecutando, ejecute el siguiente comando:

$ sudo firewall-cmd --staterunning

Si el servicio firewalld está en ejecución, ejecute los siguientes comandos para permitir las conexiones en los puertos 80/TCP y 443/TCP. El último comando del ejemplo recarga el servicio para que entren en vigor las reglas recién agregadas:

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

Para servidores Debian y Ubuntu

Siga estos pasos:

  1. Para comprobar si hay un firewall sencillo (UFW), ejecute el siguiente comando:

    $ sudo ufw status verbose
    Status:  active
  2. Si se está ejecutando un UFW, utilice el siguiente comando para permitir las solicitudes de conexión de entrada en los puertos 80/TCP 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. A continuación se muestran las ubicaciones predeterminadas para los registros del servidor web:

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

Nota: La ubicación del registro del servidor web depende de la configuración del servidor.

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 9 meses