🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Guía para montar un servidor web con Apache en Linux

Actualizado el 26 de septiembre de 2025

¡Hola! Bienvenido a esta guía completa para montar tu propio servidor web con Apache en Linux. Si estás leyendo esto, probablemente quieras dar el salto de tener un sitio web estático en tu ordenador a tenerlo disponible para todo el mundo, o quizás solo quieras aprender a administrar tu propio entorno de servidor.

No te preocupes si nunca has hecho esto antes. Vamos a ir paso a paso, explicando cada comando y cada concepto de forma sencilla. Al final de esta guía, tendrás un servidor web Apache funcionando, con tus propios sitios (virtual hosts), y entenderás cómo gestionarlo.

Esta guía está pensada para distribuciones basadas en Debian, como Ubuntu, que es la más común para estos fines. Pero los conceptos son prácticamente los mismos para otras distribuciones.

¿Qué es Apache y por qué elegirlo?

Antes de ponernos manos a la obra, es bueno saber qué estamos instalando. Apache es un software de código abierto que permite a tu ordenador "servir" páginas web. Cuando alguien escribe tu dominio en su navegador, su petición viaja por internet hasta tu servidor, y Apache es el encargado de recibir esa petición y enviar de vuelta los archivos (HTML, imágenes, etc.) que forman tu sitio web.

[INFO] Apache es uno de los servidores web más utilizados del mundo. Es estable, seguro, muy configurable y tiene una comunidad enorme, lo que significa que siempre encontrarás ayuda si te atascas.

Elegimos Apache sobre otras opciones porque es perfecto para principiantes. Su configuración es clara y está bien documentada. Además, es muy probable que tu proveedor de hosting o tu VPS ya lo tenga como opción por defecto.

Requisitos previos para empezar

Para seguir esta guía, necesitarás:

  • Un ordenador con Linux: Puede ser una máquina virtual, un VPS en la nube (como DigitalOcean, Linode o AWS) o tu propio PC de sobremesa. Te recomiendo usar un VPS para una experiencia más realista, pero cualquier opción vale.
  • Acceso a la terminal: Necesitarás una terminal con permisos de superusuario (root) o un usuario con permisos sudo. Todos los comandos que veremos los ejecutaremos desde aquí.
  • Conexión a internet: Para instalar los paquetes necesarios.

[WARNING] Si estás usando tu PC personal para esta práctica, ten en cuenta que Apache se iniciará como un servicio. Esto significa que consumirá un poco de memoria y CPU. No pasa nada, pero es bueno saberlo.

Paso 1: Actualizar el sistema

Lo primero que debemos hacer es asegurarnos de que nuestro sistema tiene todos los paquetes y repositorios actualizados. Esto evita conflictos de versiones al instalar software nuevo. Abre tu terminal y ejecuta:

sudo apt update && sudo apt upgrade -y

Este comando hace dos cosas. Primero, sudo apt update actualiza la lista de paquetes disponibles en los repositorios. Segundo, sudo apt upgrade -y instala las actualizaciones pendientes. La bandera -y responde "sí" automáticamente a cualquier pregunta que haga el sistema.

Paso 2: Instalar el servidor web Apache

Ahora sí, vamos a instalar Apache. En Ubuntu, el paquete se llama apache2. Ejecuta:

sudo apt install apache2 -y

Este proceso descargará e instalará el servidor web junto con todas sus dependencias. Al terminar, Apache se iniciará automáticamente. Podemos comprobarlo con:

sudo systemctl status apache2

Deberías ver una salida que indica que el servicio está active (running). Si no es así, puedes iniciarlo manualmente con sudo systemctl start apache2.

[TIP] Para verificar que todo funciona, abre tu navegador y visita http://localhost (si estás en el mismo ordenador) o http://IP_DE_TU_SERVIDOR (si estás en un VPS). Deberías ver la página de bienvenida por defecto de Apache. ¡Enhorabuena, ya tienes un servidor web funcionando!

Entendiendo la estructura de directorios de Apache

Antes de continuar, es crucial entender cómo está organizado Apache. Esto te ayudará a no perderte.

  • /etc/apache2/: Es el directorio principal de configuración. Aquí se encuentran todos los archivos de configuración.
  • /etc/apache2/apache2.conf: Es el archivo de configuración global. Lo modificaremos raramente.
  • /etc/apache2/sites-available/: Aquí se guardan los archivos de configuración de los sitios web que están "disponibles" pero no necesariamente activos.
  • /etc/apache2/sites-enabled/: Aquí se guardan los enlaces simbólicos a los sitios de sites-available que están "activos". Apache solo sirve los sitios que están en esta carpeta.
  • /var/www/html/: Es el directorio raíz por defecto de tu sitio web. Aquí es donde Apache busca los archivos para servir.

Paso 3: Configurar un Virtual Host en Apache

La configuración de "virtual hosts" es la que te permite tener varios sitios web en un solo servidor. Por ejemplo, podrías tener www.midominio1.com y www.midominio2.com en la misma máquina. Es una práctica muy común y esencial para cualquier administrador de sistemas.

Vamos a crear un sitio web de ejemplo llamado miprimersitio.com. Aunque no tengas un dominio real, puedes usar este nombre para la práctica y luego redirigir el tráfico editando tu archivo hosts.

Paso 3.1: Crear la estructura de directorios

Primero, crearemos una carpeta para nuestro sitio web. Ejecuta:

sudo mkdir -p /var/www/miprimersitio.com/public_html

La bandera -p crea todos los directorios padres si no existen. Ahora, vamos a darle los permisos correctos a nuestro usuario para poder trabajar con estos archivos cómodamente.

sudo chown -R $USER:$USER /var/www/miprimersitio.com

Este comando cambia el propietario de la carpeta a tu usuario actual. El símbolo $USER se expande a tu nombre de usuario.

Paso 3.2: Crear un archivo de prueba

Dentro de la carpeta public_html, vamos a crear un archivo HTML sencillo para que Apache tenga algo que servir.

sudo nano /var/www/miprimersitio.com/public_html/index.html

(Se abre el editor de texto nano. Si prefieres, puedes usar vim o cualquier otro editor).

Copia y pega el siguiente código:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Mi Primer Sitio Web</title>
</head>
<body>
    <h1>¡Hola, mundo!</h1>
    <p>Este es mi primer sitio web servido por Apache en Linux.</p>
</body>
</html>

Guarda el archivo (en nano, con Ctrl+O, luego Enter y Ctrl+X para salir).

Paso 3.3: Crear el archivo de configuración del Virtual Host

Ahora viene la parte clave. Vamos a crear un archivo de configuración para nuestro sitio. Los archivos de configuración en Apache suelen terminar en .conf.

sudo nano /etc/apache2/sites-available/miprimersitio.com.conf

Dentro, pega la siguiente configuración:

<VirtualHost *:80>
    ServerAdmin admin@miprimersitio.com
    ServerName miprimersitio.com
    ServerAlias www.miprimersitio.com
    DocumentRoot /var/www/miprimersitio.com/public_html

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

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Vamos a desglosar esto:

  • <VirtualHost *:80>: Define que este bloque se aplica a cualquier petición que llegue por el puerto 80 (el puerto estándar para HTTP).
  • ServerAdmin: Es la dirección de correo del administrador del sitio.
  • ServerName: Es el nombre de dominio principal de este sitio.
  • ServerAlias: Es un alias, como el www. al principio.
  • DocumentRoot: Es la ruta donde se encuentran los archivos de tu sitio web.
  • <Directory ...>: Este bloque establece las reglas de acceso para el directorio. Options Indexes FollowSymLinks permite listar el contenido del directorio si no hay index.html y seguir enlaces simbólicos. AllowOverride All permite el uso de archivos .htaccess. Require all granted permite el acceso a cualquier usuario.

Paso 3.4: Activar el sitio y recargar Apache

Ahora tenemos que "activar" nuestro sitio. Esto se hace creando un enlace simbólico desde sites-available a sites-enabled. Apache nos da una herramienta para esto:

sudo a2ensite miprimersitio.com.conf

Este comando crea el enlace automáticamente. Ahora, necesitamos recargar Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

[TIP] La diferencia entre restart y reload es que reload no corta la conexión de los usuarios activos, es una recarga suave. Es la opción recomendada para aplicar cambios de configuración.

Paso 3.5: Probar nuestro Virtual Host

Para probar, puedes editar tu archivo hosts local para que tu sistema apunte miprimersitio.com a tu servidor. En Linux, este archivo está en /etc/hosts.

sudo nano /etc/hosts

Añade la siguiente línea al final (si estás probando en el mismo servidor):

127.0.0.1   miprimersitio.com

Guarda el archivo. Ahora, abre tu navegador y visita http://miprimersitio.com. Deberías ver tu página de prueba. Si lo haces desde un ordenador remoto, sustituye 127.0.0.1 por la IP pública de tu servidor.

Paso 4: Configuración adicional y seguridad

Ya tienes tu servidor web Apache funcionando con un virtual host. Pero un buen administrador no se detiene aquí. Vamos a ver algunas configuraciones básicas de seguridad y rendimiento.

Habilitar módulos útiles

Apache tiene una arquitectura modular. Podemos activar y desactivar funciones según nuestras necesidades. Algunos módulos esenciales son:

  • mod_rewrite: Esencial para URLs limpias y redirecciones. Lo usan la mayoría de los CMS como WordPress.
  • mod_ssl: Para habilitar HTTPS (el candado en la barra del navegador).
  • mod_headers: Para controlar las cabeceras HTTP.

Para habilitarlos, usamos a2enmod:

sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers

Recuerda recargar Apache después de habilitar módulos.

Configurar el firewall (UFW)

Si tu servidor tiene un firewall activo (como UFW), debes permitir el tráfico HTTP y HTTPS.

sudo ufw allow 'Apache Full'

Este comando permite el tráfico en los puertos 80 y 443.

[WARNING] No olvides nunca este paso si tienes UFW activado. Si lo olvidas, tu servidor web no será accesible desde el exterior, aunque esté funcionando correctamente.

Asegurar tu servidor Apache

La seguridad es un tema amplio, pero aquí tienes algunas medidas básicas:

  • Deshabilitar el listado de directorios: En tu configuración de Virtual Host, cambia Options Indexes FollowSymLinks por Options -Indexes FollowSymLinks. Esto evita que los visitantes vean la lista de archivos si no hay un index.html.
  • Ocultar la versión de Apache: En el archivo /etc/apache2/apache2.conf, busca la línea ServerTokens y cámbiala a Prod. Esto oculta los detalles de la versión en las cabeceras HTTP.
  • Usar HTTPS: Es fundamental. Puedes obtener certificados SSL gratuitos con Let's Encrypt usando certbot. Te recomiendo encarecidamente que lo configures.

Paso 5: Gestión del servidor

Aprender a gestionar el servicio es tan importante como configurarlo. Aquí tienes los comandos más útiles:

  • Detener Apache: sudo systemctl stop apache2
  • Iniciar Apache: sudo systemctl start apache2
  • Reiniciar Apache: sudo systemctl restart apache2 (corta conexiones, pero aplica todos los cambios).
  • Recargar Apache: sudo systemctl reload apache2 (aplica cambios sin cortar conexiones).
  • Ver estado: sudo systemctl status apache2
  • Habilitar Apache al inicio: sudo systemctl enable apache2 (esto se hace por defecto en la instalación).

Ver los logs de Apache

Los logs son tus mejores amigos para diagnosticar problemas. Se encuentran en /var/log/apache2/.

  • access.log: Registra todas las peticiones que recibe el servidor.
  • error.log: Registra cualquier error que ocurra.

Puedes verlos en tiempo real con:

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

El comando tail -f muestra las últimas líneas del archivo y sigue mostrando las nuevas que se vayan añadiendo.

Preguntas frecuentes (FAQ)

¿Qué es el archivo .htaccess y para qué sirve?

Es un archivo de configuración que se coloca dentro del directorio de tu sitio web. Permite configurar cosas a nivel de directorio, como reglas de reescritura, protección con contraseña o cabeceras personalizadas, sin tener que tocar la configuración global de Apache. Para que funcione, necesitas tener AllowOverride All en tu configuración de Virtual Host.

¿Cómo puedo instalar PHP y MySQL para hacer un sitio dinámico?

Para un sitio dinámico, necesitas instalar PHP y un gestor de bases de datos. En Ubuntu, puedes instalarlos con:

sudo apt install php libapache2-mod-php php-mysql mysql-server

Esto instalará PHP, el módulo de Apache para PHP, el conector de PHP para MySQL y el servidor MySQL. Luego, puedes usar WordPress o cualquier otro CMS.

¿Cómo configuro un Virtual Host para un dominio real?

El proceso es exactamente el mismo que hemos visto. Solo necesitas tener el dominio apuntando a la IP de tu servidor (configurando los DNS de tu dominio). Luego, creas el Virtual Host con ServerName siendo tu dominio real y activas el sitio.

¿Qué es Syspanel y cómo se relaciona con Apache?

Syspanel (antes conocido como HestiaCP) es un panel de control de hosting gratuito y de código abierto que te permite gestionar servidores web, cuentas de correo, bases de datos y más, a través de una interfaz web. Es una excelente alternativa si no te sientes cómodo con la línea de comandos. Syspanel utiliza Apache (o Nginx) como servidor web subyacente, por lo que toda la configuración que hemos visto se aplica. La principal diferencia es que Syspanel te ofrece una interfaz gráfica para hacer todo esto.

[INFO] Para acceder a Syspanel, necesitas usar el puerto 2106 (por ejemplo, https://IP_DE_TU_SERVIDOR:2106). Es importante que tengas este puerto abierto en tu firewall.

¿Cómo soluciono el error "Forbidden" (403) cuando accedo a mi sitio?

Este error suele estar relacionado con permisos. Asegúrate de que el usuario de Apache (www-data) tiene permisos de lectura en el directorio de tu sitio. Puedes ejecutar:

sudo chown -R www-data:www-data /var/www/miprimersitio.com

O, si prefieres que tu usuario sea el propietario, puedes dar permisos de grupo:

sudo chown -R $USER:www-data /var/www/miprimersitio.com
sudo chmod -R 755 /var/www/miprimersitio.com

¿Cómo puedo cambiar el puerto por defecto de Apache?

Puedes cambiar el puerto en el archivo /etc/apache2/ports.conf. Busca la línea Listen 80 y cámbiala por otro puerto, por ejemplo `Listen

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel