“Permission denied”. “No space left on device”. “502 Bad Gateway”. Si administras un VPS, estos errores te sonarán. La buena noticia: la mayoría tienen soluciones rápidas.
Esta guía es tu referencia rápida para los errores más comunes y cómo arreglarlos en segundos.
Errores de permisos
Permission denied
# Error
bash: ./script.sh: Permission denied
Causa: El archivo no tiene permisos de ejecución.
Solución:
chmod +x script.sh
./script.sh
Permission denied (publickey)
# Error SSH
Permission denied (publickey)
Causas y soluciones:
# 1. Clave SSH incorrecta
ssh -i ~/.ssh/clave_correcta user@servidor
# 2. Permisos de clave incorrectos
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# 3. Clave no añadida al agente
ssh-add ~/.ssh/id_rsa
# 4. Clave no en authorized_keys del servidor
# Añadir manualmente o usar:
ssh-copy-id user@servidor
Operation not permitted
# Error
rm: cannot remove 'archivo': Operation not permitted
Causa: Archivo con atributo inmutable.
Solución:
# Ver atributos
lsattr archivo
# Quitar inmutable
sudo chattr -i archivo
# Ahora sí puedes eliminar
rm archivo
Cannot open file: Permission denied
# Error de aplicación/web
Cannot open '/var/www/site/uploads': Permission denied
Solución:
# Dar permisos al usuario web
sudo chown -R www-data:www-data /var/www/site/uploads
sudo chmod -R 755 /var/www/site/uploads
# Para carpetas de subida
sudo chmod -R 775 /var/www/site/uploads
Errores de disco
No space left on device
# Error
No space left on device
Diagnóstico:
# Ver uso de disco
df -h
# Encontrar qué ocupa más
du -sh /* 2>/dev/null | sort -hr | head -10
Soluciones rápidas:
# Limpiar logs
sudo journalctl --vacuum-time=3d
# Limpiar apt
sudo apt clean
sudo apt autoremove
# Encontrar archivos grandes
find / -type f -size +100M 2>/dev/null | head -20
# Truncar logs grandes (no borrar)
sudo truncate -s 0 /var/log/syslog
Disk quota exceeded
# Error
Disk quota exceeded
Diagnóstico:
# Ver quota del usuario
quota -s
# Ver uso real
du -sh ~
Solución: Liberar espacio o pedir aumento de quota al admin.
Read-only file system
# Error
Read-only file system
Causa: Disco montado en solo lectura (posible error de disco).
Solución:
# Ver estado de montaje
mount | grep " / "
# Remontar con escritura
sudo mount -o remount,rw /
# Si persiste, verificar errores
sudo fsck -y /dev/vda1 # En rescue mode
Errores de red/conexión
Connection refused
# Error
ssh: connect to host X port 22: Connection refused
Causas y soluciones:
# 1. Servicio no corriendo
sudo systemctl status sshd
sudo systemctl start sshd
# 2. Puerto incorrecto (verificar config)
grep Port /etc/ssh/sshd_config
# 3. Firewall bloqueando
sudo ufw status
sudo ufw allow 22/tcp
Connection timed out
# Error
ssh: connect to host X: Connection timed out
Causas:
- Firewall del proveedor
- IP incorrecta
- Servidor caído
Diagnóstico:
# Verificar IP
ping IP_SERVIDOR
# Verificar puerto
nc -zv IP_SERVIDOR 22 -w 5
# Usar consola VNC del proveedor
Name or service not known
# Error
Could not resolve hostname: Name or service not known
Solución:
# Verificar DNS
cat /etc/resolv.conf
# Usar DNS públicos
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
# Permanente en netplan (Ubuntu)
sudo nano /etc/netplan/01-netcfg.yaml
# Añadir:
# nameservers:
# addresses: [8.8.8.8, 1.1.1.1]
sudo netplan apply
Address already in use
# Error
bind: Address already in use
Diagnóstico:
# Ver qué usa el puerto
sudo lsof -i :80
sudo ss -tlnp | grep :80
Solución:
# Matar proceso que usa el puerto
sudo kill -9 PID
# O cambiar puerto en tu aplicación
Errores de servicios web
502 Bad Gateway
Causa: El proxy (Nginx) no puede conectar al backend.
Diagnóstico:
# Ver logs de Nginx
sudo tail -50 /var/log/nginx/error.log
# Verificar backend
sudo systemctl status php8.2-fpm
curl localhost:3000 # Si es Node/Python
Soluciones:
# 1. Reiniciar backend
sudo systemctl restart php8.2-fpm
# 2. Verificar socket
ls -la /run/php/php8.2-fpm.sock
# 3. Aumentar timeout en Nginx
# En location {}:
proxy_read_timeout 300;
fastcgi_read_timeout 300;
sudo nginx -t && sudo systemctl reload nginx
503 Service Unavailable
Causa: Servidor sobrecargado o backend caído.
Diagnóstico:
# Ver carga
uptime
htop
# Ver servicios
sudo systemctl status nginx php8.2-fpm mysql
Soluciones:
# 1. Reiniciar servicios
sudo systemctl restart nginx php8.2-fpm
# 2. Matar procesos desbocados
kill -9 $(pgrep -f "proceso_pesado")
# 3. Escalar recursos (temporal)
# Aumentar workers en php-fpm
504 Gateway Timeout
Causa: El backend tarda demasiado en responder.
Soluciones:
# 1. Aumentar timeouts en Nginx
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
# 2. Optimizar queries lentas
# Ver slow query log de MySQL
# 3. Añadir caché
# Redis, Varnish, o caché de aplicación
500 Internal Server Error
Diagnóstico:
# Ver logs de aplicación
sudo tail -100 /var/log/nginx/error.log
sudo tail -100 /var/log/php8.2-fpm.log
sudo tail -100 /var/www/site/storage/logs/laravel.log
Causas comunes:
# 1. Permisos incorrectos
sudo chown -R www-data:www-data /var/www/site
sudo chmod -R 755 /var/www/site
sudo chmod -R 775 /var/www/site/storage
# 2. .htaccess con errores
# Renombrar temporalmente
mv .htaccess .htaccess.bak
# 3. Error de PHP
# Habilitar display_errors temporalmente
Errores de base de datos
Can’t connect to MySQL server
# Error
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
Soluciones:
# 1. Verificar si corre
sudo systemctl status mysql
# 2. Iniciar si está parado
sudo systemctl start mysql
# 3. Verificar socket
ls -la /var/run/mysqld/mysqld.sock
# 4. Ver logs
sudo tail -50 /var/log/mysql/error.log
Access denied for user
# Error
Access denied for user 'root'@'localhost'
Solución - Resetear contraseña:
# 1. Parar MySQL
sudo systemctl stop mysql
# 2. Iniciar sin autenticación
sudo mysqld_safe --skip-grant-tables &
# 3. Conectar y cambiar contraseña
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'nueva_contraseña';
EXIT;
# 4. Reiniciar normal
sudo killall mysqld
sudo systemctl start mysql
Too many connections
# Error
Too many connections
Solución:
# 1. Ver conexiones actuales
mysql -e "SHOW PROCESSLIST;"
# 2. Aumentar límite (temporal)
mysql -e "SET GLOBAL max_connections = 200;"
# 3. Permanente en my.cnf
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Añadir:
max_connections = 200
sudo systemctl restart mysql
Errores de memoria
Cannot allocate memory
# Error
Cannot allocate memory
Diagnóstico:
free -h
ps aux --sort=-%mem | head -10
Soluciones:
# 1. Matar procesos que consumen mucho
kill -9 PID
# 2. Reiniciar servicios pesados
sudo systemctl restart mysql php8.2-fpm
# 3. Añadir swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
OOM Killer
# En logs
Out of memory: Kill process XXX
Ver qué mató:
dmesg | grep -i "killed process"
Prevención:
# Limitar memoria por servicio
# /etc/systemd/system/mysql.service.d/override.conf
[Service]
MemoryLimit=1G
Errores de SSL/HTTPS
Certificate has expired
Solución:
# Renovar con Certbot
sudo certbot renew
# Forzar renovación
sudo certbot renew --force-renewal
# Verificar auto-renovación
sudo certbot renew --dry-run
SSL_ERROR_RX_RECORD_TOO_LONG
Causa: Nginx sirviendo HTTP en puerto HTTPS.
Solución:
# Verificar configuración
sudo nginx -t
# Asegurar que el bloque HTTPS tiene:
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
Errores de procesos
Proceso zombie
# Ver zombies
ps aux | grep Z
Solución:
# Matar proceso padre
kill -9 PPID
# O reiniciar servicio
sudo systemctl restart servicio
Too many open files
# Error
Too many open files
Solución:
# Ver límites actuales
ulimit -n
# Aumentar temporalmente
ulimit -n 65535
# Permanente
sudo nano /etc/security/limits.conf
# Añadir:
* soft nofile 65535
* hard nofile 65535
# Para systemd services
# En el unit file:
LimitNOFILE=65535
Referencia rápida
Errores más comunes y solución en una línea
| Error | Solución rápida |
|---|---|
| Permission denied (archivo) | chmod +x archivo |
| Permission denied (SSH) | chmod 600 ~/.ssh/id_rsa |
| No space left | sudo journalctl --vacuum-time=1d |
| Connection refused | sudo systemctl start sshd |
| 502 Bad Gateway | sudo systemctl restart php8.2-fpm |
| 503 Service Unavailable | sudo systemctl restart nginx |
| MySQL can’t connect | sudo systemctl start mysql |
| Cannot allocate memory | sudo swapon /swapfile |
| Certificate expired | sudo certbot renew |
| Too many connections | SET GLOBAL max_connections=200; |
Preguntas frecuentes
¿Cómo sé qué error tengo exactamente?
Revisa los logs: /var/log/syslog para sistema, /var/log/nginx/error.log para web, journalctl -u servicio para servicios específicos.
¿Por qué un error aparece de repente sin cambiar nada?
Causas comunes: disco lleno por logs, certificado SSL expirado, límites de conexiones alcanzados, o actualizaciones automáticas del sistema.
¿Cómo prevengo estos errores?
Monitorización con alertas, rotación de logs, renovación automática de SSL, y revisiones periódicas de recursos (disco, RAM, conexiones).
¿Debo reiniciar el VPS completo para arreglar errores?
Rara vez. La mayoría se arreglan reiniciando solo el servicio afectado. Reiniciar el VPS completo es último recurso.
¿Cómo busco un error específico en Google?
Copia el mensaje exacto entre comillas, añade 'ubuntu' o 'nginx' según contexto. Ejemplo: "502 Bad Gateway" nginx php-fpm
Nuestra recomendación
Para resolver errores rápido:
- Lee el mensaje de error completo
- Revisa los logs relevantes
- Busca la solución específica
- Aplica y verifica
Para prevenir errores:
- Monitorización con alertas
- Logs rotados y limitados
- Recursos con margen
¿Errores que no puedes resolver? La administración gestionada de Avantys incluye resolución de incidencias 24/7.
Conclusión
La mayoría de errores en VPS tienen soluciones conocidas y rápidas. La clave es leer el mensaje de error con atención y revisar los logs correctos.
Con esta guía como referencia, resolverás el 90% de los problemas en minutos.
¿Necesitas un VPS con soporte técnico? Explora los VPS de Avantys con asistencia incluida.
¿Quieres que lo hagamos por ti?
En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.