Saltar al contenido
StealthRDP
Administración de VPS

Cómo apuntar un dominio a tu VPS y activar HTTPS gratis

Apunta un dominio a tu VPS: añade registros A, comprueba el DNS con dig o nslookup, abre los puertos 80 y 443 y activa HTTPS gratis con Let's Encrypt y Certbot.

Publicado el

9 min de lectura

Esta guía explica cómo apuntar un dominio a tu VPS, para que example.com y www.example.com muestren tu web, y cómo añadir HTTPS con un certificado gratuito de Let's Encrypt. [1] Está pensada para cualquiera que tenga un dominio y un VPS con Ubuntu 24.04 LTS y nginx o Apache, con el DNS en el registrador o en Cloudflare. Sustituye example.com y 203.0.113.10 por tu propio dominio y la dirección de tu servidor.

Qué necesitas antes de empezar

Necesitas cuatro cosas:

  • Acceso al DNS del dominio, en el registrador o en Cloudflare si el dominio usa los servidores de nombres de Cloudflare.
  • Acceso SSH con permisos de sudo, con una clave SSH en lugar de la contraseña de root, como explica nuestra lista de comprobación para reforzar SSH.
  • nginx o Apache, instalado y en marcha.
  • La dirección IPv4 pública del servidor, que tu proveedor muestra junto a los datos del servidor. Cada VPS Linux de StealthRDP tiene una dirección IPv4 dedicada.

IPv6 es opcional: un registro AAAA asocia un nombre a una dirección IPv6, así que añade registros AAAA solo si el servidor tiene una. [2] ¿Todavía estás eligiendo servidor? Nuestra guía para dimensionar un VPS para alojar una web te ayudará.

Cómo apuntar un dominio a tu VPS con registros DNS

Para apuntar un dominio a tu VPS, crea registros A que asocien example.com y www.example.com a la dirección IPv4 del servidor. [2] Haz el cambio allí donde esté alojado el DNS del dominio.

Si el dominio ya tiene una web o un correo en funcionamiento, anota primero los registros existentes. Cambia solo los registros A, AAAA y CNAME de @ y www, y no toques el resto, como los registros MX del correo.

1. Añade registros A para el dominio raíz y www

Un registro A asocia un nombre a una dirección IPv4, y, en el campo del nombre, @ representa la raíz de la zona, es decir, el propio example.com. [2]

Tipo Nombre Contenido Estado del proxy (solo Cloudflare)
A @ 203.0.113.10 DNS only, de momento
A www 203.0.113.10 DNS only, de momento
AAAA @ y www La dirección IPv6 del servidor, solo si tiene una DNS only, de momento

Borra cualquier otro registro A o AAAA de estos nombres, como el de una página de parking del registrador.

2. O apunta www con un registro CNAME

Un registro CNAME asocia un nombre a otro nombre en lugar de a una dirección. [2] Un CNAME en www que apunta a example.com sigue al registro raíz, así que, si cambia la dirección del servidor, solo tienes que editar un registro. Para www, usa el registro A o el CNAME, pero no los dos.

En Cloudflare, deja los dos registros en DNS only (nube gris) hasta que se emita el certificado; la sección sobre Cloudflare, más adelante, explica por qué.

3. Entiende el TTL antes de esperar a que se actualice el DNS

El TTL (time to live, tiempo de vida) fija cuánto tiempo guardan los resolvedores DNS una respuesta en caché antes de volver a preguntar, así que una respuesta antigua puede seguir apareciendo hasta que caduque su TTL. [2] En Cloudflare, los registros con proxy usan por defecto Auto, que equivale a 300 segundos, y los registros DNS only usan el valor que elijas. [2] Otros proveedores muestran su valor predeterminado en la columna TTL.

4. Comprueba los registros con dig o nslookup

Consulta los dos nombres en un resolvedor público, como Google Public DNS (8.8.8.8): usa dig en Linux y macOS, y nslookup en Windows. [3]

Linux o macOS
dig -t A example.com @8.8.8.8
dig -t A www.example.com @8.8.8.8
Windows (PowerShell o el símbolo del sistema)
nslookup -type=A example.com 8.8.8.8
nslookup -type=A www.example.com 8.8.8.8

Los dos nombres deben devolver 203.0.113.10; para comprobar IPv6, pide AAAA en lugar de A. Si no es así, consulta los problemas habituales más abajo.

Abre los puertos 80 y 443 con UFW

Normalmente HTTP usa el puerto TCP 80 y HTTPS el 443, y Certbot necesita que el puerto 80 sea accesible desde el resto de internet. [4] UFW viene desactivado, con una política por defecto que deniega las conexiones entrantes; al activarlo, puede cortar las conexiones existentes, como tu sesión SSH, y, si lo activas por SSH, te pide confirmación. [5]

Permite SSH antes de ejecutar sudo ufw enable, o podrías quedarte fuera del servidor. Si SSH escucha en un puerto distinto del 22, permite ese puerto en su lugar.

Permite SSH, HTTP y HTTPS y después activa UFW
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Para permitir un perfil de aplicación en lugar de números de puerto, sudo ufw app list muestra los perfiles de tu servidor y sudo ufw app info muestra los puertos que abre cada uno; pon entre comillas los nombres que contengan espacios. [5] Con IPv6 activado en UFW, que es lo predeterminado, cada regla cubre IPv4 e IPv6. [5] Si tu proveedor tiene un cortafuegos delante del servidor, abre ahí los mismos puertos. [4]

Sirve example.com con nginx o Apache

Configura example.com en tu servidor web antes de añadir HTTPS, porque Certbot espera un sitio que ya responda por HTTP sin cifrar. [4]

nginx: un bloque server para los dos nombres

En Ubuntu, nginx guarda cada bloque server en /etc/nginx/sites-available y lo activa con un enlace en /etc/nginx/sites-enabled; pon los dos nombres en la línea server_name. [6]

/etc/nginx/sites-available/example.com
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /srv/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
Crea una página de prueba, activa el sitio y recarga nginx
sudo mkdir -p /srv/example.com/html
echo "example.com works" | sudo tee /srv/example.com/html/index.html
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Apache: el equivalente con un host virtual

En Apache, un host virtual en /etc/apache2/sites-available usa ServerName para example.com y ServerAlias para www.example.com; parte de una copia del archivo predeterminado y actívalo con a2ensite. [7]

Copia el host virtual predeterminado
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
</VirtualHost>

Reiniciar Apache afecta a todos los sitios del servidor. Si hay otros en producción, revisa primero el archivo nuevo y mantén abierta tu sesión SSH.

Crea una página de prueba, activa el sitio y reinicia Apache
sudo mkdir -p /var/www/example.com
echo "example.com works" | sudo tee /var/www/example.com/index.html
sudo a2ensite example.com
sudo systemctl restart apache2.service

Abre http://example.com y http://www.example.com: los dos deben mostrar la página de prueba.

Activa HTTPS gratis con Let's Encrypt y Certbot

Certbot obtiene un certificado de Let's Encrypt y puede configurar nginx o Apache para servirlo. [4]

1. Instala Certbot como snap

La web de Certbot recomienda encarecidamente el snap a la mayoría de los usuarios. Necesita snapd; elimina antes cualquier paquete de Certbot instalado con apt, para que el comando certbot ejecute el snap. [4]

Instala Certbot en Ubuntu 24.04
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

2. Obtén el certificado y activa HTTPS

El plugin de tu servidor web obtiene el certificado y edita la configuración para servirlo, así que HTTPS queda activado en un solo paso. [4]

nginx
sudo certbot --nginx
Apache
sudo certbot --apache

Responde a las preguntas de Certbot e incluye los dos nombres, ya que un certificado puede cubrir varios. [1] Si prefieres editar tú la configuración, ejecuta sudo certbot certonly --nginx, que solo obtiene el certificado. [4] Después abre https://example.com y busca el icono del candado. [4]

3. Prueba la renovación automática

Certbot instala una tarea cron o un temporizador de systemd que renueva los certificados antes de que caduquen, así que no tienes que volver a ejecutarlo salvo que cambie tu configuración. [4] Prueba la renovación ahora, y otra vez después de cualquier cambio en el DNS, el cortafuegos o Cloudflare:

Prueba la renovación y busca el temporizador
sudo certbot renew --dry-run
systemctl list-timers

Cuánto duran los certificados de Let's Encrypt

Los certificados predeterminados de Let's Encrypt son válidos durante 90 días. [1] A partir del 10 de febrero de 2027, los certificados que Let's Encrypt emita o renueve tendrán por defecto una validez de 64 días, y se espera que los últimos certificados de 90 días caduquen el 11 de mayo de 2027; para 2028, Let's Encrypt tiene prevista una validez predeterminada de 45 días. [8] Si usas una tarea cron propia con un intervalo fijo, Let's Encrypt recomienda, en su lugar, renovar cuando hayan pasado unos dos tercios de la validez y revisar los scripts en busca de números fijos en el código, como 60, 80 u 83. [8]

Usa Full (strict) cuando el proxy de Cloudflare esté activado

Con el proxy de Cloudflare activado, pon el modo de cifrado SSL/TLS en Full (strict). El modo controla tanto la conexión de los visitantes con Cloudflare como la de Cloudflare con tu servidor. [9]

Modo De Cloudflare a tu servidor ¿Se comprueba el certificado del servidor?
Flexible HTTP sin cifrar No
Full El mismo protocolo que usó el visitante No
Full (strict) El mismo protocolo que usó el visitante Sí
Strict (SSL-Only Origin Pull) Siempre HTTPS Sí

Evita Flexible: el navegador muestra HTTPS, pero el tráfico entre Cloudflare y tu servidor no va cifrado, y la propia Cloudflare recomienda encarecidamente Full o Full (strict). [9] Además, Flexible choca con la redirección de HTTP a HTTPS que Certbot puede añadir a la configuración. [4] Cloudflare hace la petición a tu servidor por HTTP sin cifrar, el servidor redirige a HTTPS y el navegador entra en un bucle. [9] Full (strict) comprueba el certificado del servidor, que puede estar emitido por una CA pública como Let's Encrypt. [9]

Cloudflare no vuelve a pasar una zona de Full (strict) a Full si el certificado caduca, así que la renovación tiene que seguir funcionando. [9] Lo más sencillo es seguir este orden: primero el certificado y después el proxy.

Elige Full (strict) solo cuando el certificado esté instalado y la prueba de renovación (dry run) salga bien.

  1. Obtén el certificado mientras los dos registros están en DNS only.
  2. Cambia los dos registros a Proxied.
  3. En la página SSL/TLS Overview, elige Full (strict); si la zona usa Automatic SSL/TLS, selecciona antes Custom. [9]
  4. Vuelve a ejecutar sudo certbot renew --dry-run.

Con el proxy ya activado, la emisión del certificado puede funcionar igualmente: en Full y Full (strict), Cloudflare llega a tu servidor por HTTP cuando la petición es HTTP, así que la comprobación de Certbot en el puerto 80 puede atravesar el proxy. [9] Strict (SSL-Only Origin Pull) siempre se conecta por HTTPS, así que falla mientras no exista el certificado. [9] Si la emisión falla, vuelve a poner los registros en DNS only, obtén el certificado y después activa de nuevo el proxy.

Con el proxy activado, la IP del servidor sigue respondiendo a cualquiera que la conozca. Para cerrar ese hueco, permite solo las IP de Cloudflare en los puertos 80 y 443.

Problemas habituales y cómo solucionarlos

La mayoría de los fallos se deben al DNS, al cortafuegos o a demasiados reintentos.

El DNS aún no se ha actualizado. Si ves una dirección antigua, algún resolvedor sigue sirviendo una respuesta en caché, que puede conservar hasta que caduque el TTL. [2] Después de cambiar de servidores DNS o de registrador, Google Public DNS también puede devolver respuestas antiguas, y su herramienta Flush Cache las borra. [3]

Falta un registro o hay uno erróneo. Comprueba que no haya erratas en la dirección ni registros sobrantes del registrador, que exista el registro www y que no hayas hecho los cambios en un proveedor de DNS que el dominio ya no usa. Si falta el registro www, tampoco podrás activar HTTPS, porque todos los nombres de la solicitud deben superar la validación. [10] Elimina los registros AAAA salvo que el servidor responda de verdad en esa dirección IPv6.

El puerto 80 está bloqueado. Según Let's Encrypt, las validaciones HTTP-01 fallidas suelen deberse a ajustes de red o de cortafuegos que impiden que sus servidores lleguen al tuyo. [10] Revisa sudo ufw status y el cortafuegos de tu proveedor, y mantén abierto el puerto 80 después de pasar a HTTPS, porque los plugins de Certbot para nginx y Apache dependen de él. [4]

Demasiados intentos fallidos. Una cuenta puede acumular hasta 5 validaciones fallidas por hora para el mismo nombre; el cupo se repone a razón de un intento cada 12 minutos y, hasta entonces, Let's Encrypt rechaza las nuevas solicitudes para ese nombre. [10] Además, emite como máximo 5 certificados para el mismo conjunto exacto de nombres cada 7 días, y reinstalar el cliente mientras buscas el fallo es una forma habitual de llegar a ese límite. [10] Let's Encrypt no puede restablecer un límite antes de tiempo, y revocar certificados tampoco lo restablece, así que corrige la causa antes de volver a intentarlo; para hacer pruebas, recomienda su entorno de staging, que tiene límites mucho más altos. [10]

Si el dominio y el certificado funcionan, pero la página muestra un error 502 Bad Gateway, sigue los pasos de nuestra guía para solucionar el error 502 Bad Gateway.

Preguntas frecuentes

¿Cuánto tarda un dominio en apuntar a un VPS nuevo?

Depende del TTL de los registros y de lo que los resolvedores ya tengan en caché. En Cloudflare, los registros con proxy usan por defecto un TTL de 300 segundos y los registros DNS only usan el valor que configures; además, un resolvedor puede conservar una respuesta antigua hasta que caduque su TTL. [2]

¿Para www conviene un registro A o un CNAME?

Los dos sirven. Un registro A apunta www directamente a la dirección IPv4 del servidor, mientras que un CNAME lo apunta a otro nombre, como example.com, de modo que sigue a ese registro si cambia la dirección. [2]

¿Let's Encrypt es gratis?

Sí. Let's Encrypt no cobra nada por sus certificados, y los predeterminados son válidos durante 90 días. [1]

¿Cuánto tiempo son válidos los certificados de Let's Encrypt?

Actualmente, los certificados predeterminados de Let's Encrypt son válidos durante 90 días. [1] A partir del 10 de febrero de 2027, los certificados nuevos y renovados tendrán por defecto una validez de 64 días, y Let's Encrypt tiene prevista una validez predeterminada de 45 días en 2028. [8]

¿Qué modo SSL/TLS de Cloudflare debo usar con Let's Encrypt?

Usa Full (strict). Este modo valida el certificado de tu servidor, que puede ser de Let's Encrypt, mientras que Flexible deja sin cifrar la conexión entre Cloudflare y tu servidor. [9]

Fuentes y referencias
  1. FAQ — Let's Encrypt (consultado el 2026-11-03)
  2. DNS record types — Cloudflare Docs (consultado el 2026-11-03)
  3. Troubleshooting — Google Public DNS (consultado el 2026-11-03)
  4. Certbot instructions: Nginx on Linux (snap) — Certbot (EFF) (consultado el 2026-11-03)
  5. ufw(8): program for managing a netfilter firewall — Ubuntu Manpages (consultado el 2026-11-03)
  6. How to configure nginx — Ubuntu Server documentation (consultado el 2026-11-03)
  7. How to configure Apache2 settings — Ubuntu Server documentation (consultado el 2026-11-03)
  8. 64-Day Certificate Lifetimes Coming Feb 2027 — Let's Encrypt (consultado el 2026-11-03)
  9. Encryption modes — Cloudflare Docs (consultado el 2026-11-03)
  10. Rate Limits — Let's Encrypt (consultado el 2026-11-03)

Sigue leyendo