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.

27 de mayo de 202612 min
Cables de red conectados en un panel representando infraestructura de servidor
Foto: Unsplash
Contenido del artículo

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.html → index 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.

Siguiente paso

Lleva tu proyecto a un servidor preparado para crecer

Servidores Virtuales Privados con recursos garantizados, acceso root completo y escalabilidad inmediata para mayor control y rendimiento.

Siguiente paso

Sigue aprendiendo