Instalar Apache en Ubuntu: sitio y virtual host
Instalar Apache en Ubuntu es un primer paso para servir páginas web. El trabajo importante viene después: decidir qué dominio atiende, desde qué carpeta lee los archivos y cómo comprobar que una modificación no rompe otros sitios.
Esta guía utiliza paquetes de Ubuntu y un sitio HTML sencillo. Los comandos se plantean para una máquina de práctica con acceso sudo. No configuran PHP ni convierten automáticamente el servidor en una instalación de WordPress.
Revisa quién utiliza los puertos
Antes de instalar, identifica si hay otro servidor web o un contenedor escuchando en 80 y 443:
sudo ss -ltnp '( sport = :80 or sport = :443 )'
Si encuentras Nginx, un proxy o una aplicación, determina su función. Detenerlo sin revisar puede interrumpir otros dominios. Apache y Nginx pueden convivir utilizando direcciones o puertos distintos, o mediante un proxy definido expresamente.
Comprueba también cómo recuperarías el acceso si falla una regla de red. El firewall del proveedor y el del sistema son capas independientes.
Instala y comprueba el servicio
sudo apt update
sudo apt install apache2 curl
sudo systemctl enable --now apache2
systemctl is-active apache2
curl -I http://127.0.0.1/
Una respuesta HTTP local demuestra que existe un servidor atendiendo esa petición. Todavía no verifica DNS, acceso exterior ni el contenido del futuro dominio.
Si UFW ya está activo y el servidor debe recibir tráfico web público, revisa sus perfiles antes de permitir el de Apache. No actives un firewall nuevo sin conservar el acceso administrativo.
sudo ufw status verbose
sudo ufw app info 'Apache Full'
sudo ufw allow 'Apache Full'
Abrir 443 no crea un certificado ni configura un sitio HTTPS.
Crea un sitio estático de prueba
El directorio pertenece a root y Apache solo necesita leerlo. Esto evita conceder al proceso web permisos de escritura sobre todo el contenido.
sudo install -d -m 0755 /var/www/ejemplo/public
printf '%s\n' '<h1>Sitio de prueba Apache</h1>' | sudo tee /var/www/ejemplo/public/index.html
sudo chmod 0644 /var/www/ejemplo/public/index.html
sudo nano /etc/apache2/sites-available/ejemplo.conf
Guarda este virtual host. Sustituye ejemplo.com por un dominio que controles antes de publicarlo:
<VirtualHost *:80>
ServerName ejemplo.com
DocumentRoot /var/www/ejemplo/public
<Directory /var/www/ejemplo/public>
Options -Indexes
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/ejemplo-error.log
CustomLog ${APACHE_LOG_DIR}/ejemplo-access.log combined
</VirtualHost>
AllowOverride None resulta adecuado para este HTML estático. Una aplicación que utilice .htaccess puede necesitar permisos de configuración concretos y módulos adicionales. Activar AllowOverride All en todas las carpetas no es un requisito general.
Habilita, valida y prueba el dominio
sudo a2ensite ejemplo.conf
sudo apache2ctl configtest
sudo apache2ctl -S
Solo si configtest termina correctamente, recarga:
sudo systemctl reload apache2
curl --resolve ejemplo.com:80:127.0.0.1 http://ejemplo.com/
La opción --resolve permite probar el nombre sin cambiar DNS. Debe aparecer el contenido del archivo creado. La lista de virtual hosts ayuda a detectar nombres repetidos y qué sitio responderá cuando ninguna coincidencia sea exacta.
No deshabilites el sitio predeterminado por costumbre: revisa primero si está atendiendo tráfico. Para que el dominio funcione desde internet, sus registros A y, cuando corresponda, AAAA deben dirigir al servidor correcto.
Diagnóstico y vuelta atrás
Ante un 403, revisa permisos de todos los directorios del recorrido y las reglas Require. No lo soluciones con chmod 777. Ante una página inesperada, compara ServerName, cabecera Host y salida de apache2ctl -S.
sudo tail -n 50 /var/log/apache2/ejemplo-error.log
sudo journalctl -u apache2 --since '15 minutes ago'
Si el cambio provoca problemas, deshabilita únicamente el sitio nuevo con a2dissite ejemplo.conf, valida la configuración y recarga. Conserva los archivos para revisar el error. HTTPS se puede añadir después mediante Certbot; prueba tanto el certificado servido como el mecanismo de renovación.
Preguntas frecuentes
¿Apache ejecutará PHP después de instalarlo?
No necesariamente. Hace falta un manejador PHP compatible, como PHP-FPM o el módulo apropiado, y comprobar su integración. Una página HTML no verifica esa capa.
Puede haber diferencias de DNS, IPv6, firewall, proxy o caché. La prueba local solo confirma la ruta al servidor y virtual host indicados.
¿Necesito habilitar rewrite para cualquier sitio?
No. Un sitio estático sencillo puede funcionar sin él. Actívalo cuando la aplicación o las reglas de reescritura realmente lo necesiten.
En pocas palabras
Un servicio activo y una página de bienvenida solo confirman una parte del recorrido. Un sitio necesita archivos legibles, virtual host correcto, resolución del dominio y comprobaciones desde dentro y fuera del servidor.
Conclusión
Conserva una configuración pequeña y comprueba cada cambio antes de recargar. Cuando el sitio HTTP responda en el dominio previsto, configura HTTPS y verifica también su renovación.
Para continuar, revisa Cómo instalar Ubuntu desde una USB: paso a paso y Cómo instalar Docker en Ubuntu 24.04: guía práctica paso a paso.
