Esta guía configura un servidor web Apache en un equipo con Debian o Ubuntu que ya está instalado y se puede administrar por SSH. Aprenderás a abrir solo los puertos necesarios, publicar una página estática con un sitio virtual, comprobar DNS y activar HTTPS.
No necesitas reinstalar el sistema operativo para alojar una web en una máquina virtual de un proveedor. Aquí tampoco instalamos una base de datos: Apache puede servir archivos estáticos sin MySQL ni MariaDB. Para WordPress u otra aplicación dinámica, hacen falta pasos adicionales para PHP, la base de datos y la seguridad de la aplicación.
Requisitos y alcance
- Un servidor Debian o Ubuntu actualizado, con una cuenta que pueda usar sudo.
- Acceso de consola del proveedor o una sesión SSH funcional. Conserva una forma de recuperación antes de cambiar SSH o el firewall.
- Una dirección IP pública; para usar un dominio, prepara sus registros DNS y confirma que el proveedor permite el tráfico TCP en los puertos 80 y 443.
Los comandos de paquetes y servicios de esta guía son para Debian y Ubuntu. En distribuciones de la familia Red Hat cambian los paquetes, el servicio y el firewall; no mezcles esas instrucciones con UFW.
1. Comprueba y actualiza el sistema
Confirma qué distribución ejecuta el servidor antes de copiar comandos. En un servidor remoto, evita actualizar o reiniciar durante una sesión crítica sin tener a mano la consola del proveedor.
cat /etc/os-release
sudo apt update
sudo apt upgradeEl primer comando muestra la distribución y su versión. Los siguientes actualizan el índice de paquetes e instalan actualizaciones disponibles; revisa los cambios que propone APT antes de confirmarlos.
2. Configura el acceso SSH y el firewall
Si administras el equipo por SSH, permite primero el puerto de SSH que realmente usas. Si cambiaste el puerto por defecto, sustituye el perfil OpenSSH por una regla para ese puerto y mantén abierta la sesión actual mientras pruebas una segunda conexión.
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status verboseRevisa que la regla de SSH aparece antes de activar UFW. Comprueba también el firewall o grupo de seguridad del proveedor: las reglas del sistema operativo no abren por sí solas el tráfico de red externo.
sudo ufw enable
sudo ufw status verboseActiva UFW solo después de comprobar las reglas y de confirmar que puedes recuperar el servidor si pierdes la conexión. Si el perfil OpenSSH no existe, permite el puerto SSH efectivo antes de activar el firewall. La configuración aquí es una base sencilla, no una auditoría completa de seguridad.
3. Instala Apache y confirma que responde
sudo apt install apache2
sudo systemctl enable --now apache2
systemctl is-active apache2
curl -I http://127.0.0.1El estado active y una respuesta HTTP desde 127.0.0.1 confirman que Apache está ejecutándose localmente. Después de permitir TCP 80 en el firewall del proveedor, abre la IP pública en un navegador. La página predeterminada solo verifica la instalación; todavía no configura tu dominio.
4. Publica un sitio con un VirtualHost
Apache usa sitios virtuales para asociar un dominio con una carpeta de documentos. En estos ejemplos, cambia example.com por tu dominio real. Incluye www solo si también lo vas a configurar en DNS.
sudo mkdir -p /var/www/example.com/public_html
sudo tee /var/www/example.com/public_html/index.html >/dev/null <<'EOF'
<!doctype html>
<html lang="es">
<head><meta charset="utf-8"><title>Mi sitio</title></head>
<body><h1>Apache está sirviendo mi sitio</h1></body>
</html>
EOFCrea el archivo del sitio virtual. DocumentRoot indica dónde están los archivos; ServerName y ServerAlias determinan los nombres de host que atiende.
sudo tee /etc/apache2/sites-available/example.com.conf >/dev/null <<'EOF'
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
Options -Indexes
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
EOF
sudo a2ensite example.com.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
sudo apache2ctl -SContinúa solo si configtest devuelve Syntax OK. Comprueba que Apache selecciona el sitio esperado y prueba la cabecera HTTP localmente antes de depender del DNS:
curl -I -H 'Host: example.com' http://127.0.0.1Si el sitio no es el predeterminado, puedes desactivar la configuración predeterminada después de confirmar que el nuevo VirtualHost funciona. No cambies permisos de carpetas a 777; concede únicamente lectura y recorrido a los archivos que Apache debe servir.
5. Configura DNS y HTTPS
Crea un registro A que apunte el dominio a la IP pública. Añade un registro AAAA solo si el servidor tiene IPv6 configurado y accesible. Una dirección IPv6 incorrecta puede hacer que algunos visitantes no lleguen al sitio.
getent ahosts example.comCuando el dominio resuelva a este servidor y TCP 80 esté accesible desde Internet, instala Certbot siguiendo sus instrucciones actuales para tu distribución y Apache. El modo Apache puede configurar HTTPS a partir del VirtualHost existente. Si publicas también www, inclúyelo en el certificado.
sudo certbot --apache -d example.com -d www.example.comPrueba la renovación automática y visita el sitio con HTTPS. Si no has creado el alias www, elimina ese nombre del comando. Consulta las instrucciones vigentes de Certbot para Apache para elegir el método de instalación apropiado.
sudo certbot renew --dry-run6. Diagnostica los fallos habituales
- La página funciona en 127.0.0.1, pero no desde fuera: revisa DNS, el firewall del proveedor y las reglas UFW para TCP 80/443.
- Aparece la página predeterminada: comprueba el dominio enviado por el navegador y la salida de apache2ctl -S; confirma que el VirtualHost está habilitado.
- Apache muestra un error 403: verifica la ruta de DocumentRoot, los permisos de lectura y recorrido y las reglas de la sección Directory. No lo soluciones con permisos abiertos a todo el mundo.
- El servicio no inicia o falla la recarga: ejecuta las comprobaciones siguientes y lee el primer error de configuración que aparezca.
sudo apache2ctl configtest
sudo systemctl status apache2 --no-pager
sudo journalctl -u apache2 -n 50 --no-pager
sudo tail -n 50 /var/log/apache2/error.log
sudo ss -ltnp '( sport = :80 or sport = :443 )'Los archivos de registro por sitio también pueden estar definidos en el VirtualHost. Usa la ruta indicada por sus directivas ErrorLog y CustomLog para separar errores de solicitudes.
Mantenimiento del servidor
- Aplica actualizaciones con regularidad y comprueba el estado de Apache después de cambios importantes.
- Guarda una copia de la configuración de /etc/apache2 y de los archivos del sitio en un destino separado del servidor. Una instantánea del mismo disco no sustituye a una copia independiente.
- Revisa los logs, el espacio disponible y la renovación de los certificados. Si alojas una aplicación, actualiza también su código, dependencias y base de datos.
Fuentes oficiales
Consulta la documentación de cada herramienta para ver las opciones y los detalles que pueden variar entre versiones:
- Instalar Apache2 en Ubuntu Server
- Configurar Apache2 y los VirtualHosts
- Firewall en Ubuntu Server
- OpenSSH Server en Ubuntu
- Instrucciones de Certbot para Apache
Lecciones relacionadas
- Qué es un servidor y para qué sirve
- Archivos de configuración de red en Linux
- Índice del curso de Linux
Sigue aprendiendo
👉 Y recuerda, si quieres aprender más de Linux, visita el curso de Linux gratis.
🐳 Si quieres aprender más de Docker, visita el curso de Docker gratis.

