Saltar al contenido principal
VPS

Cómo conectar un dominio a un VPS (DNS, Nginx y SSL)

Tutorial completo para conectar un dominio a un VPS: configurar DNS, Nginx como servidor web e instalar SSL Let's Encrypt en menos de 30 minutos.

Equipo Moshipp27 de mayo de 202612 min de lectura
Cables de red conectados en un panel representando infraestructura de servidor
Foto: Unsplash

Tener un VPS sin un dominio apuntando es como tener un negocio sin dirección: nadie te encuentra. Conectar un dominio a un VPS suena complicado, pero son 3 pasos claros: DNS → Nginx → SSL. Esta guía te lleva del momento “acabo de comprar el VPS” hasta “mi sitio responde en https://midominio.com” en menos de 30 minutos.

Aplica para cualquier proveedor de VPS (Moshipp, DigitalOcean, AWS, Vultr) y cualquier distribución basada en Debian/Ubuntu.

Lo que vas a necesitar

  1. Un dominio registrado (lo compraste en Namecheap, Moshipp, etc.).
  2. Un VPS con IP pública. Asume Ubuntu 22.04/24.04 o Debian 12.
  3. Acceso SSH al VPS (ssh root@TU.IP.VPS).
  4. Puertos 80 y 443 abiertos en el firewall del proveedor (Moshipp VPS los abre por defecto).

Tiempo total: 20-30 minutos (más 1-24 horas de propagación DNS).

Paso 1: Apuntar el DNS del dominio al VPS

A. Identifica la IP pública de tu VPS

Conéctate por SSH y ejecuta:

curl -4 ifconfig.me

Te devuelve algo como 203.0.113.45. Guárdala.

B. Configura los registros DNS

Tienes dos opciones, según dónde administres el DNS:

Opción 1: si los nameservers están en tu registrar (Namecheap, GoDaddy, Moshipp):

  1. Entra al panel del registrar.
  2. Manage DNS / DNS Records / Zone Editor.
  3. Crea 2 registros tipo A:
@      A    203.0.113.45    TTL 3600
www    A    203.0.113.45    TTL 3600

@ representa el dominio raíz (tudominio.com). Algunos paneles muestran un campo en blanco para representarlo.

Opción 2: si usas Cloudflare como DNS:

Igual, en el panel de Cloudflare → DNS → Records → Add → A → @ → 203.0.113.45. Importante: en proxy “DNS only” (gris) durante la configuración inicial. Más tarde puedes activar proxy naranja.

C. Espera propagación

dig tudominio.com +short

Debe responder con tu IP del VPS. Si responde algo distinto, espera. Propagación: 5 minutos a 24 horas según TTL y región.

Para más detalle sobre tipos de registros DNS, mira la guía completa de DNS.

Paso 2: Preparar el VPS (Ubuntu 22.04/24.04)

A. Actualizar el sistema

ssh root@203.0.113.45
apt update && apt upgrade -y

B. Crear usuario no-root

Trabajar como root es peligroso. Crea un usuario propio:

adduser deploy
usermod -aG sudo deploy

Copia tu clave SSH al nuevo usuario:

rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy

Sal y vuelve a entrar como deploy:

ssh deploy@203.0.113.45

C. Configurar firewall básico

sudo apt install -y ufw
sudo ufw allow OpenSSH
sudo ufw allow "Nginx Full"
sudo ufw enable

Verifica:

sudo ufw status

Debes ver permitidos: 22 (SSH), 80 (HTTP), 443 (HTTPS).

Paso 3: Instalar Nginx

Nginx es el servidor web más liviano y rápido. Lo usaremos como front-end:

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

Verifica que esté corriendo:

sudo systemctl status nginx

Abre http://203.0.113.45 en tu navegador. Debes ver la página “Welcome to nginx!”.

Paso 4: Crear el directorio del sitio

sudo mkdir -p /var/www/tudominio.com/html
sudo chown -R $USER:$USER /var/www/tudominio.com
sudo chmod -R 755 /var/www/tudominio.com

Crea un archivo de prueba:

nano /var/www/tudominio.com/html/index.html

Pega:

<!DOCTYPE html>
<html>
<head><title>Funciona</title></head>
<body>
  <h1>¡Funciona! Mi VPS sirve tudominio.com</h1>
</body>
</html>

Paso 5: Configurar el server block de Nginx

Cada dominio en Nginx vive en un archivo de configuración:

sudo nano /etc/nginx/sites-available/tudominio.com

Pega:

server {
    listen 80;
    listen [::]:80;

    root /var/www/tudominio.com/html;
    index index.html index.htm index.php;

    server_name tudominio.com www.tudominio.com;

    location / {
        try_files $uri $uri/ =404;
    }

    # Logs
    access_log /var/log/nginx/tudominio.com.access.log;
    error_log /var/log/nginx/tudominio.com.error.log;
}

Habilita el sitio

sudo ln -s /etc/nginx/sites-available/tudominio.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -t debe responder syntax is ok y test is successful. Si falla, revisa typos.

Prueba

Ve a http://tudominio.com en tu navegador. Debes ver tu página de prueba.

Si aún ves la página de Welcome

Es porque el server block default de Nginx sigue activo. Desactívalo:

sudo unlink /etc/nginx/sites-enabled/default
sudo systemctl reload nginx

Paso 6: Instalar SSL con Let’s Encrypt

HTTPS no es opcional en 2026. Let’s Encrypt es gratis y la integración con Nginx es automática:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d tudominio.com -d www.tudominio.com

Certbot:

  1. Te pide email y aceptar términos.
  2. Detecta tu configuración de Nginx.
  3. Valida el dominio (hace una petición a tudominio.com/.well-known/acme-challenge/... — necesita resolver vía DNS).
  4. Emite el certificado.
  5. Modifica el server block de Nginx para servir HTTPS.
  6. Pregunta si quieres redirección HTTP → HTTPS → contesta 2 (sí, redirigir).

Verifica:

curl -I https://tudominio.com

Debe responder HTTP/2 200. Si lo abres en navegador, verás el candado verde.

Renovación automática

Certbot ya instaló un timer:

sudo systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Si el dry-run pasa, no tienes que hacer nada más por 90 días.

Para más detalle sobre Let’s Encrypt y configuración avanzada, mira la guía completa de SSL.

Paso 7: Subir tu sitio real (opciones)

Tu sitio ya responde con HTTPS. Ahora sube tu contenido real.

Opción A: rsync desde tu computadora

rsync -avz --delete ./mi-sitio/ deploy@203.0.113.45:/var/www/tudominio.com/html/

Opción B: Git pull en el VPS

cd /var/www/tudominio.com/html
git clone https://github.com/tu-usuario/tu-repo.git .

Para deploys automáticos, configura GitHub Actions o webhooks.

Opción C: SFTP (con FileZilla)

Conéctate con tus credenciales SSH, sube los archivos a /var/www/tudominio.com/html/.

Opción D: Servir una app Node.js / Python / Laravel

Cambia el location / en el server block para hacer proxy reverso:

location / {
    proxy_pass http://127.0.0.1:3000;     # puerto de tu app
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Tu app corre en localhost:3000 y Nginx la expone con SSL al mundo.

Paso 8: Instalar PHP (opcional, para WordPress/Laravel)

Si vas a correr WordPress, Laravel o cualquier app PHP:

sudo apt install -y php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
  php8.2-mbstring php8.2-xml php8.2-zip php8.2-imagick

Modifica el server block para procesar PHP:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Cambia index index.htmlindex index.php index.html:

index index.php index.html;

Recarga:

sudo nginx -t && sudo systemctl reload nginx

Paso 9: Configurar varios dominios (multi-sitio)

Un VPS puede servir múltiples dominios sin costo extra. Crea un server block por dominio:

sudo nano /etc/nginx/sites-available/otrodominio.com

Mismo patrón:

  • server_name otrodominio.com www.otrodominio.com;
  • root /var/www/otrodominio.com/html;
  • Habilítalo: sudo ln -s /etc/nginx/sites-available/otrodominio.com /etc/nginx/sites-enabled/

Apunta el DNS del segundo dominio a la misma IP del VPS. Nginx distingue por server_name.

Repite el SSL:

sudo certbot --nginx -d otrodominio.com -d www.otrodominio.com

Buenas prácticas de seguridad para VPS

Una vez funcionando, endurece la seguridad:

Deshabilita login por contraseña SSH

En /etc/ssh/sshd_config:

PasswordAuthentication no
PermitRootLogin no

Reinicia: sudo systemctl restart ssh. Asegúrate de tener tu clave SSH copiada antes de hacer este cambio o quedarás bloqueado.

Instala fail2ban

Bloquea automáticamente IPs con muchos intentos fallidos:

sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Actualizaciones automáticas

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

Aplica parches de seguridad sin intervención.

Monitoreo básico

sudo apt install -y htop nethogs

htop (uso de CPU/RAM), nethogs (tráfico por proceso). Esenciales para diagnosticar problemas.

Errores comunes y soluciones

”No puedo acceder a http://tudominio.com” (timeout)

  • DNS no propaga aún: prueba con dig tudominio.com +short desde fuera.
  • Firewall del VPS bloquea puerto 80: sudo ufw status.
  • Nginx no está corriendo: sudo systemctl status nginx.

”404 Not Found” en lugar de mi sitio

  • Falta archivo index.html o index.php en /var/www/tudominio.com/html/.
  • Server block no está habilitado (revisa /etc/nginx/sites-enabled/).
  • server_name mal escrito.

”502 Bad Gateway”

Nginx no puede conectar con el backend (PHP-FPM, Node.js, etc.). Verifica que el servicio backend esté corriendo:

sudo systemctl status php8.2-fpm
sudo systemctl status mi-app

Certbot falla con “Connection refused”

El puerto 80 está cerrado o nada escucha en él. Verifica con sudo netstat -tlnp | grep :80 que Nginx esté escuchando.

”Mi sitio es lento aunque tengo VPS”

Posibles causas:

  • No optimizaste Nginx (gzip/brotli).
  • No instalaste cache (Redis, Memcached, plugins de WP).
  • Tu app es lenta en sí — perfila con herramientas como htop para ver dónde se gasta el tiempo.

”El dominio raíz funciona pero el www no”

Falta el registro A o el server block:

  • DNS: añade www A TU.IP.VPS.
  • Nginx: asegura server_name tudominio.com www.tudominio.com;.
  • Renueva el SSL incluyendo www: sudo certbot --nginx -d tudominio.com -d www.tudominio.com.

Bonus: optimización de Nginx para producción

Edita /etc/nginx/nginx.conf:

worker_processes auto;
worker_connections 1024;

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    # Gzip
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss text/javascript;

    # Brotli (si instalas el módulo)
    # brotli on;
    # brotli_comp_level 6;

    # Cache de archivos estáticos
    map $sent_http_content_type $expires {
        default                    off;
        text/html                  epoch;
        text/css                   max;
        application/javascript     max;
        ~image/                    max;
    }
    expires $expires;
}

Recarga: sudo nginx -t && sudo systemctl reload nginx.

Preguntas frecuentes

¿Cuánto tiempo toma conectar un dominio a un VPS?

20-30 minutos para configuración (DNS + Nginx + SSL). Más 1-24 horas de propagación DNS. Si bajas el TTL del DNS a 300 antes, la propagación es casi inmediata.

¿Puedo conectar varios dominios al mismo VPS?

Sí, sin límite real. Cada dominio tiene su server block en Nginx y su propio SSL. Un VPS con 4 GB RAM puede servir 5-15 sitios sin problema según tráfico y complejidad.

¿Necesito un panel como cPanel para administrar el VPS?

No es obligatorio. Para usuarios técnicos, SSH + Nginx + Certbot es más liviano y flexible. Si prefieres GUI, instala Webmin (gratis), Plesk (~$15/mes), o CyberPanel (gratis con LiteSpeed).

¿Apache es mejor que Nginx?

Para servir sitios estáticos y como proxy reverso, Nginx es más rápido y eficiente (consume menos RAM). Para sitios PHP con .htaccess complejo, Apache es más amigable. Lo más común hoy es Nginx en front + PHP-FPM en back.

¿Qué pasa si me equivoco al configurar Nginx?

Cuando ejecutas `sudo nginx -t`, te avisa de errores ANTES de recargar. Si el test falla, el reload no se ejecuta y tu sitio sigue funcionando. Por eso siempre prueba con `-t` antes de `reload`.

¿Pueden hackear mi VPS por estar conectado a internet?

Sí, si lo dejas mal configurado. Las medidas básicas (ufw activo, SSH sin password auth, fail2ban, actualizaciones automáticas) bloquean el 95% de ataques automatizados. Lleva más estadística que un hosting compartido genérico.

¿Puedo usar el VPS para correo y web al mismo tiempo?

Técnicamente sí, pero no es recomendable. Configurar y mantener correo es complejo (SPF, DKIM, DMARC, reverse DNS, blacklists). Mejor usa Google Workspace o Microsoft 365 para correo y tu VPS para web. Los costos compensan.

Conclusión

Conectar un dominio a un VPS no es magia: es DNS apuntando + Nginx escuchando + SSL emitido. Cada paso es claro y el resultado es un sitio profesional con HTTPS, listo para escalar lo que necesites — desde una landing simple hasta una app Laravel + Redis + PostgreSQL.

Si el setup técnico te abruma o no tienes tiempo, en Moshipp ofrecemos VPS Cloud con servicio de configuración asistida en español. También tenemos VPS pre-configurados para casos específicos como el VPS N8N que llega con todo listo.

Una vez tu dominio responde con SSL, considera agregar Cloudflare gratis para mejorar velocidad y seguridad. Y si tu sitio será WordPress, sigue la guía para acelerarlo para sacar todo el rendimiento del VPS.

Sigue aprendiendo

Migración sin complicaciones

¿Migrar desde otro proveedor de hosting?

¿Estás cansado de la falta de rapidez y seguridad en tu sitio web? ¡Migra a Moshipp y obtén un servicio de hosting de calidad superior!

Más de 10,000 sitios web migrados con éxito