Cómo configurar un servidor web Apache en Ubuntu: Guía completa paso a paso

目次

1. Introducción

¿Qué es un servidor web en Ubuntu?

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:
ElementoRequisitos mínimosRequisitos recomendados
Sistema operativoUbuntu 22.04 LTSUbuntu 22.04 LTS
CPU1GHz o superior2GHz o superior
Memoria512MB2GB o más
Almacenamiento10GB o más20GB o más
RedConexión a InternetSe 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:

  1. Crear el medio de instalación
  • Memoria USB (usando herramientas como Rufus)
  • Montar el archivo ISO en una máquina virtual
  1. 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)
  1. Reiniciar tras completar la instalación
  2. 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:
  1. Actualizar paquetes
   sudo apt update && sudo apt upgrade -y
→ Aplica parches de seguridad y actualizaciones de software.
  1. Configurar zona horaria
   sudo timedatectl set-timezone Asia/Tokyo
→ Ajusta la zona horaria (ejemplo: JST).
  1. Habilitar firewall
   sudo ufw enable
→ Protege contra accesos no autorizados.
  1. 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 ...

Reiniciar o detener Apache

sudo systemctl restart apache2
sudo systemctl stop apache2

Verificar funcionamiento de Apache

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:
  1. 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
  1. 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.

Pasos para configurar un host virtual

1. Crear los directorios necesarios

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

2. Cambiar propietario de los directorios

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html

3. Crear archivos HTML de prueba

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/.

Configuración de example.com

sudo nano /etc/apache2/sites-available/example.com.conf
Contenido:
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

Configuración de test.com

sudo nano /etc/apache2/sites-available/test.com.conf
Contenido:
<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html

    <Directory /var/www/test.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
    CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>

5. Habilitar los hosts virtuales

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Probar configuración

sudo apachectl configtest
Salida esperada:
Syntax OK
Si no hay errores:
sudo systemctl restart apache2

6. Verificación local (archivo hosts)

Edita el archivo /etc/hosts en tu PC:
127.0.0.1 example.com
127.0.0.1 test.com
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.

Instalar el cliente Let’s Encrypt (Certbot)

sudo apt update
sudo apt install certbot python3-certbot-apache -y

Configurar Apache automáticamente

sudo certbot --apache -d example.com -d www.example.com
El proceso realiza:
  1. Validación del dominio (HTTP-01 challenge)
  2. Emisión del certificado SSL
  3. Configuración de Apache
  4. Redirección automática a HTTPS

Verificar funcionamiento

Accede a:
https://example.com/
Si aparece el icono de candado en el navegador, la configuración es correcta.

Configurar SSL manualmente en Apache

Si no se usa certbot --apache, se puede configurar manualmente.

1. Activar el módulo SSL de Apache

sudo a2enmod ssl
sudo systemctl restart apache2

2. Configurar host virtual SSL

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
Contenido:
<VirtualHost *:443>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

3. Habilitar configuración y reiniciar Apache

sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2

Renovación automática de certificados SSL

Los certificados de Let’s Encrypt tienen una validez de 90 días.

1. Probar renovación automática

sudo certbot renew --dry-run

2. Comprobar programación de renovación

sudo systemctl list-timers | grep certbot

Solución de problemas SSL

1. Certificado no aplicado

sudo systemctl restart apache2
sudo apachectl configtest

2. Certificado caducado

sudo certbot renew --force-renewal

3. Fallo en la validación de Let’s Encrypt

Verifica reglas de firewall:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Resumen

En esta sección aprendiste:
  • Conceptos básicos de SSL/TLS
  • Configuración automática de SSL con Let’s Encrypt
  • Configuración manual de SSL en Apache
  • Renovación automática de certificados
  • Resolución de errores comunes de SSL

6. Refuerzo de la seguridad del servidor web

Configuración del firewall (UFW)

En Ubuntu, es fundamental usar UFW (Uncomplicated Firewall) para bloquear conexiones innecesarias.

Verificar configuración actual del firewall

sudo ufw status

Permitir solo los puertos necesarios

Por defecto, se deben bloquear todas las conexiones entrantes y permitir solo los puertos requeridos.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Puertos a abrir:
  • SSH (puerto 22)
  sudo ufw allow 22/tcp
  • HTTP (puerto 80)
  sudo ufw allow 80/tcp
  • HTTPS (puerto 443)
  sudo ufw allow 443/tcp

Habilitar el firewall

sudo ufw enable

Refuerzo de la seguridad en SSH

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.
sudo apt install fail2ban -y
Editar configuración:
sudo nano /etc/fail2ban/jail.local
Ejemplo:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600
Activar servicio:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Configuración de seguridad en Apache

Ocultar información de versión

sudo nano /etc/apache2/conf-available/security.conf
Cambiar a:
ServerTokens Prod
ServerSignature Off
Aplicar cambios:
sudo systemctl restart apache2

Deshabilitar listado de directorios

sudo nano /etc/apache2/apache2.conf
Editar:
<Directory /var/www/>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
Reiniciar:
sudo systemctl restart apache2

Desactivar módulos innecesarios

sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2

Agregar cabeceras de seguridad

Las cabeceras ayudan a proteger contra ataques comunes en la web.

Habilitar mod_headers

sudo a2enmod headers
sudo systemctl restart apache2

Configurar cabeceras

sudo nano /etc/apache2/sites-available/example.com.conf
Añadir dentro de <VirtualHost>:
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
Reiniciar:
sudo systemctl restart apache2

Solución de problemas

Verificar firewall

sudo ufw status

Probar configuración de Apache

sudo apachectl configtest
Salida:
Syntax OK

Problemas al conectar por SSH

Si cambiaste el puerto:
ssh -p 2222 usuario@ip-del-servidor

Resumen

En esta sección aprendiste:
  • Configurar UFW
  • Proteger SSH (cambio de puerto, Fail2Ban)
  • Endurecer Apache (ocultar versión, desactivar listados)
  • Añadir cabeceras de seguridad

7. Optimización del rendimiento

Ajustes de Apache

La configuración por defecto de Apache no siempre es la más eficiente. Ajustando ciertos parámetros se puede lograr un mejor rendimiento.

Optimización de MPM (Multi-Processing Module)

MPM determina cómo Apache maneja las solicitudes. Comprobar el MPM actual:
apachectl -M | grep mpm
Ejemplo:
mpm_prefork_module (shared)
Si está en mpm_prefork_module, se recomienda cambiar a mpm_event:
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

Habilitar KeepAlive

KeepAlive permite que un cliente reutilice la misma conexión, reduciendo solicitudes repetitivas. Editar configuración:
sudo nano /etc/apache2/apache2.conf
Asegúrate de tener:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Reinicia Apache:
sudo systemctl restart apache2

Uso de caché

El almacenamiento en caché reduce solicitudes innecesarias y acelera las respuestas.

Habilitar mod_expires (caché en navegador)

sudo a2enmod expires
sudo systemctl restart apache2
Editar /etc/apache2/sites-available/example.com.conf:
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Reinicia Apache:
sudo systemctl restart apache2

Habilitar mod_cache (caché en servidor)

sudo a2enmod cache cache_disk
sudo systemctl restart apache2
Agregar en /etc/apache2/sites-available/example.com.conf:
<IfModule mod_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheDefaultExpire 86400
</IfModule>
Reinicia Apache:
sudo systemctl restart apache2

Habilitar compresión

Con mod_deflate, se reduce el tamaño de los datos enviados.

Activar mod_deflate

sudo a2enmod deflate
sudo systemctl restart apache2
Agregar en /etc/apache2/sites-available/example.com.conf:
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
Reinicia Apache:
sudo systemctl restart apache2

Limitación de recursos

Para evitar sobrecargas, Apache permite limitar recursos.

Activar mod_ratelimit

sudo a2enmod ratelimit
sudo systemctl restart apache2
Configurar en /etc/apache2/sites-available/example.com.conf:
<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Location>
Reinicia Apache:
sudo systemctl restart apache2

Solución de problemas

Si tras optimizar aparecen problemas:

Revisar logs de Apache

sudo tail -f /var/log/apache2/error.log

Ver estado de Apache

sudo apachectl status

Ver uso de CPU/memoria

top
o
htop

Resumen

En esta sección aprendiste:
  • Ajustar MPM y KeepAlive
  • Configurar caché (navegador y servidor)
  • Habilitar compresión con mod_deflate
  • Aplicar limitación de recursos con mod_ratelimit

8. Solución de problemas

Apache no inicia o se detiene

Verificar el estado de Apache

sudo systemctl status apache2
Ejemplo:
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since ...
Si aparece Active: failed, ocurrió un error.

Revisar logs de errores

sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log

Comprobar puertos en uso

sudo netstat -tulnp | grep ':80'
o
sudo lsof -i:80
Si hay conflicto de puertos, edita:
sudo nano /etc/apache2/ports.conf

Errores relacionados con SSL

Certificado expirado

sudo certbot renew --force-renewal

AH02572: Failed to configure at least one certificate

Verifica configuración en:
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Luego reinicia Apache:
sudo systemctl restart apache2

Errores 403, 404, 500

403 Forbidden

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html

404 Not Found

Verifica la ruta en DocumentRoot:
DocumentRoot /var/www/example.com/public_html
Si mod_rewrite está deshabilitado:
sudo a2enmod rewrite
sudo systemctl restart apache2

500 Internal Server Error

Revisa logs:
sudo tail -f /var/log/apache2/error.log
Prueba renombrando .htaccess:
mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak

Problemas de alto consumo o rendimiento

Ver carga del servidor

top
o
htop

Desactivar módulos innecesarios

sudo a2dismod status
sudo a2dismod autoindex
sudo systemctl restart apache2

Optimizar caché

sudo a2enmod cache cache_disk

Problemas de red

Ver IP del servidor

ip a
o
curl ifconfig.me

Verificar puertos abiertos

sudo netstat -tulnp | grep LISTEN
o
sudo lsof -i :80
Si puertos 80/443 no están abiertos, ajusta firewall:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Resumen

En esta sección aprendiste:
  • Cómo actuar cuando Apache no inicia
  • Resolver errores de certificados SSL
  • Solución para errores 403 / 404 / 500
  • Optimización de rendimiento
  • Verificación de red y firewall

9. Conclusión

Lo aprendido hasta ahora

Repasemos lo visto en cada sección:
SecciónContenido
1. IntroducciónConceptos básicos de un servidor web en Ubuntu y objetivos del artículo
2. Instalación y configuración inicial de UbuntuInstalación del sistema, actualizaciones y firewall
3. Instalación y configuración básica de ApacheInstalación, inicio y verificación de Apache
4. Configuración de hosts virtualesAlojamiento de múltiples sitios en un mismo servidor
5. Implementación de SSL/TLSUso de Let’s Encrypt para habilitar HTTPS
6. Refuerzo de la seguridad del servidor webFirewall, protección SSH y seguridad en Apache
7. Optimización del rendimientoCaché, compresión y ajustes de Apache
8. Solución de problemasErrores 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 PHPConfigurar 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. 🚀
侍エンジニア塾