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
- Un dominio registrado (lo compraste en Namecheap, Moshipp, etc.).
- Un VPS con IP pública. Asume Ubuntu 22.04/24.04 o Debian 12.
- Acceso SSH al VPS (
ssh root@TU.IP.VPS). - 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):
- Entra al panel del registrar.
- Manage DNS / DNS Records / Zone Editor.
- 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 nginxPaso 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:
- Te pide email y aceptar términos.
- Detecta tu configuración de Nginx.
- Valida el dominio (hace una petición a
tudominio.com/.well-known/acme-challenge/...— necesita resolver vía DNS). - Emite el certificado.
- Modifica el server block de Nginx para servir HTTPS.
- 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 +shortdesde 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.htmloindex.phpen/var/www/tudominio.com/html/. - Server block no está habilitado (revisa
/etc/nginx/sites-enabled/). server_namemal 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
htoppara 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

Cómo proteger un VPS Linux: hardening básico paso a paso
Guía para endurecer la seguridad de un VPS Linux: SSH, firewall, fail2ban, actualizaciones automáticas y monitoreo. 12 medidas esenciales.
Leer más
Cómo instalar Docker en un VPS Ubuntu (con ejemplos prácticos)
Tutorial completo para instalar Docker y Docker Compose en un VPS Ubuntu. Incluye casos de uso reales: WordPress, N8N, PostgreSQL y más.
Leer más
Cómo instalar N8N en un VPS paso a paso (Ubuntu + Docker)
Tutorial completo para instalar N8N self-hosted en un VPS Ubuntu con Docker, Nginx y SSL gratuito. Guía probada de 30 minutos.
Leer más
