Saltar al contenido

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

8 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 los problemas de sitios web inaccesibles, comprueba que has configurado correctamente la configuración del sitio web de la instancia de EC2. La configuración incorrecta del servidor web de la instancia bloquea el acceso a todos los sitios web alojados en ella.

Resolución

Comprobar si la instancia se está ejecutando y supera ambas comprobaciones de estado

Comprueba la consola de Amazon EC2 para comprobar que la instancia se está ejecutando. Para solucionar los problemas de comprobación de estado, consulta ¿Por qué mi instancia de EC2 de Linux no es accesible y no supera una o ninguna de las comprobaciones de estado?

Además, usa la salida de la consola de instancias y una captura de pantalla de la instancia para comprobar si la instancia se inicia correctamente.

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

Comprueba las siguientes configuraciones de instancia:

Comprobar que el sitio web tenga la configuración de DNS correcta

Comprueba las siguientes configuraciones de DNS de tu sitio web:

Comprobar que el servidor web esté funcionando y que ningún firewall del sistema operativo bloquee el acceso a los puertos

Para comprobar la configuración del puerto de red y el servidor web, sigue estos pasos:

  1. Usa SSH o Session Manager, una función de AWS Systems Manager, para conectarte a la instancia. Si no puedes usar SSH o Session Manager para conectarte a instancias creadas en AWS Nitro System, utiliza la consola serie de EC2.

  2. Para comprobar si el sitio web está en ejecución localmente, ejecuta el siguiente comando desde el sitio web host de instancias de EC2:

    curl https://localhost

    O bien:

    curl http://localhost:443

    Nota: Si tienes problemas al usar curl, comprueba si hay problemas con la configuración de la aplicación y el servidor web de la instancia.

  3. Para comprobar el estado del servicio del servidor web, ejecuta el siguiente comando según el sistema operativo (SO) que ejecutes.
    Red Hat Enterprise Linux (RHEL), CentOS, Fedora y Amazon Linux:

    sudo systemctl status httpd.service

    Resultado de ejemplo:

    The Apache HTTP Server
    Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset:
    disabled)
    Active: inactive (dead)

    Debian y Ubuntu:

    sudo systemctl status apache2.service

    Resultado de ejemplo:

    The Apache HTTP Server
    Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor
    preset: disabled)
    Active: inactive (dead)

    En el resultado del comando, comprueba el estado inactivo.
    Si tu sistema Linux ejecuta el Sistema V, ejecuta el siguiente comando para comprobar el estado del servidor web:

    sudo service httpd status

    Nota: Si ejecutas Debian o Ubuntu, sustituye httpd por apache2.
    Resultado de ejemplo:

    httpd is stopped
  4. Para iniciar el servidor web y establecer el servicio para que se inicie al arrancar, ejecuta los siguientes comandos según tu sistema operativo:
    RHEL, CentOS, Fedora y Amazon Linux:

    sudo systemctl start httpd; sudo systemctl enable httpd

    Debian o Ubuntu:

    sudo systemctl start apache2; sudo systemctl enable apache2
  5. Para comprobar que el servicio de servidor web se está ejecutando y está activado, ejecuta los siguientes comandos según tu sistema operativo:
    RHEL, CentOS, Fedora y Amazon Linux:

    sudo systemctl status httpd.service

    Resultado de ejemplo:

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

    Debian o Ubuntu:

    sudo systemctl status apache2.service

    Resultado de ejemplo:

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

    Para iniciar un servicio de servidor web detenido para sistemas que se ejecutan en System V, ejecuta el siguiente comando:

    sudo service httpd start

    Resultado de ejemplo:

    Starting httpd:                                            [  OK  ]
  6. Para confirmar que el servidor web escucha las solicitudes de conexión de usuarios entrantes, ejecuta el siguiente comando:

    sudo netstat -tulpn|grep -i :80
    tcp6       0      0 :::80                   :::*                    LISTEN      11993/httpd

    Nota: Ejecuta el comando anterior dos veces. La segunda vez, sustituye 80 por 443. 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 ejecutas varias interfaces, ejecuta el siguiente comando para confirmar que el servidor web escucha en todas las direcciones IP:

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

    Ejemplos de salidas:

    Listen *:80
    Listen *:443
  7. Si usas un firewall del sistema operativo, asegúrate de que permita solicitudes en los puertos 80 y 443.

  8. (Opcional) Para comprobar que las reglas de iptables permiten las solicitudes entrantes en los puertos 80 y 443, ejecuta el siguiente comando:

    sudo iptables -vnL

    Resultado de ejemplo:

    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

    En el resultado del ejemplo anterior, las reglas solo permiten el Protocolo de mensajes de control de Internet (ICMP), el host local y el puerto 22/TCP (SSH). Las reglas bloquean las conexiones entrantes al puerto TCP 80 o 443.

  9. Para configurar las reglas de iptables para permitir que los puertos 80 y 443 acepten solicitudes de conexión HTTP y HTTPS entrantes, ejecuta el siguiente comando:

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

    Resultado de ejemplo:

    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

Comprobar las configuraciones para AL2023, AL2 y RHEL 7 y versiones posteriores

Para las instancias de Amazon Linux 2023 (AL2023), Amazon Linux 2 (AL2) y RHEL, ejecuta el siguiente comando para comprobar si el servicio firewalld se está ejecutando:

sudo firewall-cmd --state

Resultado de ejemplo:

running

Si el servicio firewalld está en ejecución, ejecuta los siguientes comandos para permitir las conexiones en los puertos TCP 80 y 443:

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

Nota: Si has agregado reglas anteriormente, el comando reload vuelve a cargar el servicio y hace que las reglas entren en vigor.

Para cada comando, comprueba que el resultado sea similar al del siguiente ejemplo:

success

Comprobar las configuraciones de los servidores Debian y Ubuntu

Sigue estos pasos:

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

    sudo ufw status verbose

    Resultado de ejemplo:

    Status:  active
  2. Si estás ejecutando un UFW, utiliza el siguiente comando para permitir las solicitudes de conexión entrantes en los puertos TCP necesarios:
    Puerto TCP 80:

    sudo ufw allow in 80/tcp

    Puerto TCP 443:

    sudo ufw allow 443/tcp
  3. Para cada comando, comprueba que el resultado sea similar al del siguiente ejemplo:

    Rule added
    Rule added (v6)

Para seguir solucionando problemas, compruebe si hay problemas en los registros de errores de acceso al servidor web en /var/log. Usa las siguientes ubicaciones predeterminadas para los registros del servidor web:

  • Para Amazon Linux y RHEL, utiliza /var/log/httpd.
  • Para Debian y Ubuntu, utiliza /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 AWSActualizada hace 10 meses