Verificar el puerto 80 te indica si tu servidor web es accesible por HTTP, el protocolo que los navegadores usan por defecto cuando escribes una URL sin "https://". Si el puerto 80 está bloqueado o no está escuchando, los visitantes recibirán errores de conexión y tu sitio quedará inaccesible. Aquí te explicamos exactamente cómo diagnosticarlo y solucionarlo.
Tabla de contenidos
- Para qué sirve realmente el puerto 80
- Cómo verificar si el puerto 80 está abierto
- Usar netstat para inspeccionar el puerto 80
- Diagnosticar el puerto 80 bloqueado por el firewall
- Puerto HTTP sin respuesta: causas frecuentes y soluciones
- Probar la conectividad del puerto 80 desde fuera de tu red
- Puerto 80 vs. puerto 443: cuándo importa cada uno
Para qué sirve realmente el puerto 80
El puerto 80 es el puerto TCP por defecto para
HTTP (Hypertext Transfer Protocol)
. Cuando un navegador se conecta a
http://example.com
, apunta automáticamente al puerto 80 en la dirección IP de ese servidor. El software del servidor, ya sea Apache, Nginx, IIS, Caddy u otro, debe estar escuchando activamente en el puerto 80 para que esa conexión funcione.
El puerto 80 está definido en el registro oficial de puertos de IANA y estandarizado en RFC 9110. Es un puerto "bien conocido", lo que significa que los números del 0 al 1023 están reservados para servicios a nivel de sistema y requieren privilegios elevados para enlazarse en Linux/macOS.
Cómo verificar si el puerto 80 está abierto
Hay varias formas de comprobar si el puerto 80 está abierto, dependiendo de si lo haces localmente (en el propio servidor) o de forma remota (desde otra máquina o desde internet).
Usando telnet
Telnet es la prueba manual más rápida. Ejecútala desde cualquier máquina con acceso de red al host de destino:
telnet example.com 80
Si el puerto 80 está abierto y hay un servidor web escuchando, verás un cursor en blanco o un banner HTTP. Si está cerrado o filtrado, recibirás "Connection refused" o el comando se quedará colgado hasta que expire el tiempo de espera.
Usando curl
curl te da más detalle: muestra la respuesta HTTP real:
curl -v http://example.com
El flag
-v
imprime una salida detallada, incluyendo el handshake TCP y las cabeceras de respuesta. Una conexión exitosa muestra
* Connected to example.com (93.184.216.34) port 80
. Un fallo muestra
curl: (7) Failed to connect
.
Usando nmap
nmap es el estándar para el escaneo de puertos. Para probar específicamente el puerto 80:
nmap -p 80 example.com
El resultado mostrará uno de tres estados: open (algo está escuchando), closed (el puerto es accesible pero nada está escuchando), o filtered (un firewall está descartando paquetes y nmap no puede determinar el estado).
Usando PowerShell en Windows
Test-NetConnection -ComputerName example.com -Port 80
El cmdlet
Test-NetConnection
de PowerShell devuelve un valor booleano limpio de
TcpTestSucceeded : True
o
False
, lo que facilita su uso en scripts. Para una guía completa sobre cómo verificar puertos en Windows, consulta
cómo verificar puertos abiertos en Windows
.
Usar netstat para inspeccionar el puerto 80
Cuando estás en el propio servidor,
netstat
te muestra exactamente qué proceso está enlazado al puerto 80. Esta es la herramienta adecuada cuando necesitas responder a la pregunta: "¿hay algo escuchando realmente en el puerto 80 de esta máquina?"
Linux / macOS
sudo netstat -tlnp | grep :80
Descripción de los flags:
-
-t- solo conexiones TCP -
-l- solo sockets en escucha -
-n- mostrar direcciones numéricas (más rápido, omite las búsquedas DNS) -
-p- mostrar el nombre del proceso y el PID
Un resultado típico se ve así:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
. Eso indica que nginx (PID 1234) está escuchando en todas las interfaces en el puerto 80.
En sistemas Linux modernos,
ss
es más rápido y preferible a
netstat
:
sudo ss -tlnp | grep :80
Windows
netstat -ano | findstr :80
Esto lista todas las conexiones en el puerto 80 junto con su PID. Para encontrar el nombre del proceso a partir del PID (por ejemplo, PID 4892):
tasklist /fi "pid eq 4892"
Diagnosticar el puerto 80 bloqueado por el firewall
Un bloqueo de firewall es la razón más común por la que el puerto 80 aparece cerrado desde el exterior aunque tu servidor web funcione correctamente de forma local. El bloqueo puede ocurrir en tres capas distintas:
| Capa | Dónde verificar | Herramienta |
|---|---|---|
| Firewall del sistema operativo (servidor) | iptables / ufw (Linux), Windows Defender Firewall |
iptables -L -n
o reglas de Windows Firewall
|
| Grupo de seguridad en la nube | AWS EC2 Security Groups, Azure NSG, GCP Firewall Rules | Reglas de entrada en la consola de la nube |
| Firewall de red/ISP | ACL del router, bloqueo de puertos residenciales por el ISP | Contactar al ISP o usar un escáner de puertos externo |
Verificar iptables en Linux
sudo iptables -L INPUT -n -v | grep 80
Si ves una regla DROP o REJECT para el puerto 80, ahí está el problema. Para permitir el puerto 80 con ufw:
sudo ufw allow 80/tcp
sudo ufw reload
Verificar los grupos de seguridad en AWS
Si tu servidor está en EC2, ve a la consola de EC2, luego a Security Groups y revisa las reglas de entrada (Inbound rules). Necesitas una regla que permita el puerto TCP 80 desde
0.0.0.0/0
(o tu rango de IP específico). Sin esta regla, todo el tráfico al puerto 80 se descarta antes de llegar siquiera al firewall del sistema operativo.
Para un análisis más detallado del diagnóstico de puertos en Linux, la guía completa para verificar puertos abiertos en Linux cubre iptables, ufw, firewalld y nftables en detalle.
Puerto HTTP sin respuesta: causas frecuentes y soluciones
Cuando el puerto HTTP no responde, el problema suele caer en una de estas categorías:
-
El servidor web no está en ejecución
- Verifica con
systemctl status nginxosystemctl status apache2. Si está detenido, inícialo:sudo systemctl start nginx. -
El servidor web falló al arrancar
- Revisa los logs:
sudo journalctl -u nginx --since "10 minutes ago". Un error de sintaxis en la configuración o un conflicto de puertos quedará registrado aquí. -
El servidor solo escucha en localhost
- Si la configuración de tu servidor indica
listen 127.0.0.1:80en lugar delisten 0.0.0.0:80, no aceptará conexiones externas. Corrige la dirección de bind en la configuración del servidor. - El puerto 80 ya está en uso - Otro proceso ocupó el puerto 80 antes de que arrancara tu servidor web. Usa netstat para identificarlo y luego detén ese proceso o reconfigura uno de los servicios.
-
SELinux o AppArmor bloquean el bind
- En sistemas RHEL/CentOS, SELinux puede impedir que un proceso no estándar se enlace al puerto 80. Revisa
ausearch -m AVC -ts recentpara ver los rechazos.
curl http://127.0.0.1
directamente en el servidor. Si eso funciona pero las conexiones externas fallan, el problema está en el firewall o en una regla de red, no en el servidor web en sí.
Probar la conectividad del puerto 80 desde fuera de tu red
Hacer pruebas desde tu propia máquina puede ser engañoso: podrías estar en la misma LAN que el servidor, saltándote las reglas de firewall que aplican al tráfico externo. Para probar la conectividad del puerto 80 tal como la experimentaría un visitante real, necesitas una prueba externa.
Puedes revisar las cabeceras de respuesta HTTP de tu servidor desde el exterior con nuestra herramienta de verificación de cabeceras HTTP . Obtiene las cabeceras de tu URL y muestra exactamente lo que recibe un navegador: códigos de estado, tipo de servidor, cadenas de redirección y más, todo desde un punto de vista externo.
Otras opciones externas:
- Escáneres de puertos en línea - Sitios como portchecker.co o canyouseeme.org te permiten ingresar una IP y un número de puerto para probar desde sus servidores.
-
Desde un VPS o una consola en la nube
- Crea una instancia gratuita en la nube en una región diferente y ejecuta
nc -zv your-server-ip 80desde allí. -
Usando nc (netcat) localmente
-
nc -zv example.com 80da un resultado rápido de abierto/cerrado sin instalar nada adicional en la mayoría de sistemas Linux/macOS.
Puerto 80 vs. puerto 443: cuándo importa cada uno
El puerto 443 gestiona HTTPS (HTTP cifrado mediante TLS). La mayoría de los sitios modernos redirigen todo el tráfico del puerto 80 al puerto 443 de inmediato. Pero el puerto 80 sigue siendo relevante por varias razones:
- Desafíos HTTP-01 de ACME/Let's Encrypt - El certbot de Let's Encrypt usa el puerto 80 para verificar la propiedad del dominio. Si el puerto 80 está bloqueado, la emisión del certificado falla.
- Servicios internos sin TLS - Muchas herramientas internas, agentes de monitoreo y microservicios se comunican por HTTP plano en el puerto 80 dentro de una red privada.
- Clientes legacy y dispositivos IoT - Algunos dispositivos embebidos y clientes más antiguos no soportan TLS y dependen del puerto 80.
- Infraestructura de redirección - Aunque sirvas todo por HTTPS, necesitas el puerto 80 abierto para capturar y redirigir las solicitudes HTTP, en lugar de dejar a los usuarios con un error de conexión.
Ve al instante qué está devolviendo el puerto 80
Nuestra herramienta de verificación de cabeceras HTTP obtiene la respuesta en vivo de cualquier URL para que puedas confirmar si el puerto 80 está abierto, revisar cadenas de redirección y ver los códigos de estado exactos que envía tu servidor, sin necesidad de usar la línea de comandos.
Verificar cabeceras HTTP ahora →
En Linux, ejecuta
sudo ss -tlnp | grep :80
o
sudo netstat -tlnp | grep :80
. Ambos comandos muestran el nombre del proceso y el PID enlazado al puerto 80. En Windows, usa
netstat -ano | findstr :80
para obtener el PID y luego
tasklist /fi "pid eq [PID]"
para encontrar el nombre del proceso. Los ocupantes más habituales son nginx, apache2, IIS y servidores Node.js.
Usa los mismos comandos netstat o ss pero filtrando por 8080:
sudo ss -tlnp | grep :8080
en Linux, o
netstat -ano | findstr :8080
en Windows. El puerto 8080 es un puerto HTTP alternativo muy común, utilizado por servidores de desarrollo, Tomcat, Jenkins y proxies. Si ya hay algo enlazado allí, tendrás que detenerlo o configurar tu nuevo servicio para que use un puerto diferente.
En servidores web dedicados e instancias VPS, sí: el puerto 80 generalmente está abierto y es lo esperado. En conexiones residenciales a internet, muchos ISP bloquean el puerto 80 entrante para evitar que los clientes alojen servidores públicos desde casa. En instancias en la nube, el puerto 80 suele estar cerrado por defecto en el grupo de seguridad hasta que añades explícitamente una regla de entrada que lo permita.
Desde fuera del servidor, usa
nmap -p 80 your-server-ip
o
telnet your-server-ip 80
. Desde el propio servidor, usa
ss -tlnp | grep :80
para confirmar que algo está escuchando. Revisa también las reglas del firewall: en Linux con ufw, ejecuta
sudo ufw status
para ver si el puerto 80 aparece como permitido.
En Linux con ufw:
sudo ufw allow 80/tcp
. Con iptables directamente:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
. En Windows, añade una regla de entrada en Windows Defender Firewall para el puerto TCP 80. En un servidor en la nube, añade una regla de entrada en tu grupo de seguridad o network security group que permita el puerto TCP 80 desde el rango de origen deseado.
El puerto 80 está abierto cuando un servidor web está configurado para servir tráfico HTTP, que es el estándar para cualquier sitio web público. También permanece abierto en servidores que redirigen HTTP a HTTPS (puerto 443), porque la propia redirección requiere aceptar la conexión inicial en el puerto 80. Las herramientas de renovación de certificados como certbot de Let's Encrypt también necesitan el puerto 80 para los desafíos de validación de dominio HTTP-01.
Abre Windows Defender Firewall con seguridad avanzada, haz clic en "Reglas de entrada" y luego en "Nueva regla". Elige "Puerto", selecciona TCP, introduce 80 como puerto local específico, elige "Permitir la conexión", aplícalo a todos los perfiles (Dominio, Privado, Público) y asigna un nombre a la regla. También puedes ejecutar esto en un símbolo del sistema de PowerShell con privilegios elevados:
New-NetFirewallRule -DisplayName "HTTP Port 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
.
Sí, en Linux y macOS el puerto 80 es un puerto privilegiado (los puertos del 0 al 1023 requieren permisos de root o la capability CAP_NET_BIND_SERVICE para enlazarse). Esto significa que un proceso de usuario normal no puede escuchar en el puerto 80 sin permisos elevados. Los servidores web como nginx y Apache suelen iniciarse como root para enlazarse al puerto 80 y luego cambian a un usuario con menos privilegios para gestionar las solicitudes. En Windows no existe esta restricción equivalente para el puerto 80.
El puerto 80 (HTTP) se usa en lugar del 443 (HTTPS) en situaciones donde TLS no es necesario o práctico, como microservicios internos en una red privada de confianza, entornos de desarrollo local o dispositivos IoT sin soporte para TLS. El puerto 80 también es obligatorio para los desafíos de certificados HTTP-01 de Let's Encrypt. Para cualquier sitio público, se recomienda firmemente el puerto 443 con TLS, dejando el puerto 80 abierto únicamente para redirecciones.
No, son puertos diferentes. El puerto 80 es el estándar asignado por IANA para HTTP y los navegadores lo usan automáticamente cuando no se especifica ningún puerto. El puerto 8000 es una alternativa no oficial muy usada por servidores de desarrollo: el servidor de desarrollo de Python con
python -m http.server
usa el puerto 8000 por defecto, al igual que el servidor de desarrollo de Django. Para acceder a un servicio en el puerto 8000, debes especificarlo explícitamente en la URL:
http://example.com:8000
.