Un servidor web es un sistema que proporciona sitios web en Internet. Entre los softwares de servidor web se encuentran Apache, Nginx y LiteSpeed, pero el más utilizado en Ubuntu es Apache.
Ubuntu es ligero, estable y de código abierto, lo que lo hace popular tanto para uso personal como empresarial. En particular, facilita la construcción de un entorno LAMP (Linux, Apache, MySQL/MariaDB, PHP), ideal para administrar sitios web y aplicaciones.
Público objetivo de este artículo
Este artículo está dirigido a principiantes que construyen su primer servidor web. Explicaremos en detalle cómo implementar Apache en Ubuntu, configurar hosts virtuales y certificados SSL, además de aplicar optimización y medidas de seguridad.
Lo que aprenderás en este artículo
Cómo construir un servidor web en Ubuntu (instalación y configuración básica de Apache)
Configuración de hosts virtuales y gestión de múltiples sitios
Implementación de SSL gratuito con Let’s Encrypt
Refuerzo de la seguridad y optimización del servidor web
Solución de problemas comunes y cómo resolverlos
2. Instalación y configuración inicial de Ubuntu
Requisitos del sistema
Para operar Ubuntu como servidor web, se recomienda el siguiente mínimo de especificaciones:
Elemento
Requisitos mínimos
Requisitos recomendados
Sistema operativo
Ubuntu 22.04 LTS
Ubuntu 22.04 LTS
CPU
1GHz o superior
2GHz o superior
Memoria
512MB
2GB o más
Almacenamiento
10GB o más
20GB o más
Red
Conexión a Internet
Se recomienda alta velocidad
Descarga e instalación de Ubuntu
Ubuntu se puede descargar desde el sitio oficial (https://ubuntu.com/download/server). Obtén el archivo ISO e instálalo en un entorno virtual con VirtualBox o VMware o en un servidor dedicado o VPS.
Pasos de instalación:
Crear el medio de instalación
Memoria USB (usando herramientas como Rufus)
Montar el archivo ISO en una máquina virtual
Configurar siguiendo el asistente de instalación
Seleccionar idioma “Español” u otro según preferencia
Verificar la conexión de red
Configurar nombre de usuario y contraseña
Instalar servidor SSH (puede hacerse después)
Reiniciar tras completar la instalación
Iniciar sesión y comenzar la configuración inicial
Configuración básica inicial
Después de la instalación, realiza las siguientes configuraciones básicas:
Actualizar paquetes
sudo apt update && sudo apt upgrade -y
→ Aplica parches de seguridad y actualizaciones de software.
Configurar zona horaria
sudo timedatectl set-timezone Asia/Tokyo
→ Ajusta la zona horaria (ejemplo: JST).
Habilitar firewall
sudo ufw enable
→ Protege contra accesos no autorizados.
Configurar SSH (para administración remota)
Verificar si SSH está habilitado sudo systemctl status ssh
Si está deshabilitado, activarlo sudo systemctl enable --now ssh
Con esto, el servidor Ubuntu estará listo para ser utilizado como servidor web.
3. Instalación y configuración básica de Apache
¿Qué es Apache?
Apache (nombre completo: Apache HTTP Server) es un software de servidor web de código abierto. Gracias a su estabilidad, extensibilidad y alto nivel de seguridad, aproximadamente el 30% de los servidores en el mundo utilizan Apache.
Características principales:
Gratuito (código abierto)
Estructura de módulos que facilita la ampliación
Compatibilidad con SSL/TLS para habilitar HTTPS
Soporte de Hosts Virtuales para administrar múltiples sitios
Instalación de Apache
En Ubuntu, Apache se instala fácilmente con el sistema de gestión de paquetes apt.
Instalar Apache
Ejecuta el siguiente comando para instalar Apache:
sudo apt update
sudo apt install apache2 -y
Verificar instalación
Tras la instalación, comprueba la versión de Apache:
apache2 -v
Ejemplo de salida:
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2023-07-01T12:34:56
Si aparece esta información, Apache se ha instalado correctamente.
Iniciar, detener y reiniciar Apache
Apache se administra con el comando systemctl.
Iniciar Apache
sudo systemctl start apache2
Habilitar inicio automático
sudo systemctl enable apache2
Verificar estado de Apache
sudo systemctl status apache2
Ejemplo de salida:
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since ...
Accede a la dirección IP del servidor para confirmar que Apache está funcionando.
1. Comprobar dirección IP del servidor
hostname -I
o bien
curl ifconfig.me
2. Verificar en el navegador
Introduce en la barra de direcciones:
http://<IP-del-servidor>/
o en entorno local:
http://localhost/
Deberías ver la página por defecto de Apache (/var/www/html/index.html). Ejemplo de página por defecto:
Apache2 Ubuntu Default Page
It works!
Configuración del firewall
Ubuntu utiliza UFW (Uncomplicated Firewall).
Permitir reglas de Apache
sudo ufw allow 'Apache'
Para permitir también HTTPS:
sudo ufw allow 'Apache Full'
Comprobar estado del firewall
sudo ufw status
Ejemplo:
Status: active
To Action From
-- ------ ----
Apache ALLOW Anywhere
Apache (v6) ALLOW Anywhere (v6)
Resumen
Hemos instalado y configurado Apache en Ubuntu.
Contenido cubierto en esta sección:
Cómo instalar Apache
Configurar inicio y arranque automático
Verificación en navegador
Configuración del firewall
Archivos de configuración básicos
4. Configuración de hosts virtuales (gestión de múltiples sitios)
¿Qué es un host virtual?
Un host virtual es un mecanismo que permite ejecutar varios dominios (o subdominios) en un solo servidor Apache.
Por ejemplo, un mismo servidor puede alojar example.com y test.com al mismo tiempo. Existen dos tipos principales:
Host virtual basado en nombre (Name-based Virtual Host)
Usa la misma dirección IP para varios sitios
Es el método más común
Host virtual basado en IP (IP-based Virtual Host)
Asigna diferentes IP a diferentes sitios
Requiere múltiples interfaces de red en el servidor
En la mayoría de los casos se utiliza Name-based Virtual Host.
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html
4. Crear archivos de configuración del host virtual
Los archivos de configuración se ubican en /etc/apache2/sites-available/.
Guarda y verifica en el navegador: http://example.com/ → “Welcome to example.com”http://test.com/ → “Welcome to test.com”
7. Solución de problemas
1. Revisar logs de Apache
sudo tail -f /var/log/apache2/error.log
2. Verificar si la configuración está habilitada
ls /etc/apache2/sites-enabled/
3. Comprobar puertos de Apache
sudo nano /etc/apache2/ports.conf
Debe incluir:
Listen 80
Resumen
En esta sección aprendiste:
Concepto de host virtual
Creación de directorios dedicados
Archivos de configuración y habilitación
Verificación en entorno local
Solución de problemas comunes
5. Implementación de SSL/TLS (HTTPS)
¿Qué es SSL/TLS?
SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son tecnologías de cifrado que garantizan comunicaciones seguras en Internet.
Ventajas de implementar SSL/TLS
✅ Cifrado de la comunicación (reduce el riesgo de robo o manipulación de datos)
✅ Mejora en SEO de Google (los sitios HTTPS son favorecidos en resultados de búsqueda)
✅ Evita advertencias del navegador (los sitios HTTP muestran “conexión no segura”)
✅ Protección de pagos online y credenciales de inicio de sesión Actualmente, se recomienda TLS (TLS 1.2 / 1.3), ya que SSL 3.0 y anteriores están obsoletos.
Obtener un certificado SSL gratuito con Let’s Encrypt
Let’s Encrypt es una autoridad certificadora gratuita (CA) que permite generar certificados SSL fácilmente.
Se utiliza certbot para instalarlos en Apache.
El acceso SSH suele ser objetivo de ataques de fuerza bruta, por lo que es necesario endurecer su configuración.
Cambiar el puerto SSH
sudo nano /etc/ssh/sshd_config
Cambiar estas opciones:
Port 2222 # cambiar de 22 a otro puerto
PermitRootLogin no # prohibir acceso directo como root
PasswordAuthentication no # desactivar autenticación por contraseña (solo llaves SSH)
Reiniciar servicio SSH:
sudo systemctl restart ssh
Instalar Fail2Ban
Fail2Ban bloquea temporalmente IPs que intentan accesos fallidos repetidamente.
Conceptos básicos de un servidor web en Ubuntu y objetivos del artículo
2. Instalación y configuración inicial de Ubuntu
Instalación del sistema, actualizaciones y firewall
3. Instalación y configuración básica de Apache
Instalación, inicio y verificación de Apache
4. Configuración de hosts virtuales
Alojamiento de múltiples sitios en un mismo servidor
5. Implementación de SSL/TLS
Uso de Let’s Encrypt para habilitar HTTPS
6. Refuerzo de la seguridad del servidor web
Firewall, protección SSH y seguridad en Apache
7. Optimización del rendimiento
Caché, compresión y ajustes de Apache
8. Solución de problemas
Errores comunes de Apache y cómo resolverlos
Próximos pasos
Después de completar la configuración básica, puedes avanzar hacia configuraciones avanzadas como:
✅ Instalar WordPress u otras aplicaciones PHP ✅ Configurar bases de datos (MySQL / MariaDB) ✅ Implementar un proxy inverso (Nginx + Apache) ✅ Entornos con autoescalado (AWS, GCP, Azure)
✅ Monitoreo y gestión de logs (fail2ban, logwatch, etc.)
Preguntas frecuentes (FAQ)
Q1: ¿Debo elegir Nginx o Apache en Ubuntu?
A1: Para contenido estático se recomienda Nginx, mientras que para contenido dinámico (PHP, etc.) es preferible Apache. También pueden usarse juntos.
Q2: ¿Se puede automatizar la renovación de SSL?
A2: Sí, con Certbot. Puedes probar con: sudo certbot renew --dry-run y configurar cron para su ejecución automática.
Q3: ¿Cómo mejorar aún más la seguridad del servidor?
A3: Usar Fail2Ban contra ataques de fuerza bruta, ocultar la versión de Apache y desactivar módulos innecesarios.
Q4: ¿Cómo optimizar el rendimiento de Apache?
A4: Ajustando el MPM, habilitando caché (mod_cache) y compresión (mod_deflate).
Q5: ¿Por qué aparece un error 403 Forbidden?
A5: Revisa si el directorio tiene permisos correctos (chown www-data y chmod 755).
Conclusión
La construcción de un servidor web en Ubuntu requiere múltiples pasos, desde la instalación básica hasta optimización avanzada, pero ofrece un entorno seguro, escalable y de alto rendimiento. 🚀 Usa esta guía como referencia para implementar y administrar tu propio servidor web en Ubuntu con Apache. 🚀