Cómo instalar Apache en Debian 10 Buster

En esta entrada mostraremos cómo instalar Apache en Debian 10 Buster paso a paso, el servidor web más popular que sigue siendo una referencia a día de hoy. Al final de esta guía dispondrás de este servicio funcionando en tu servidor o VPS Debian listo para servir tus páginas y aplicaciones web, incluyendo servidores virtuales y seguridad SSL.

Antes de instalar Apache en Debian 10 Buster

Si vas a instalar Apache en Debian 10 Buster siguiendo esta guía debes cumplir estos mínimos requisitos:

  • Un sistema Linux Debian 10 Buster actualizado.
  • Acceso por consola con un usuario con permisos de sudo o como root.
  • Conexión a Internet.

Como seguro que cumples estos requerimientos, ya puedes ir abriendo tu terminal de línea de comandos favorita para empezar a teclear.

Cómo instalar Apache en Debian 10

Para instalar Apache en Debian 10 utilizaremos los paquetes que incluye la propia distribución en sus repositorios oficiales.

En primer lugar, un paso opcional pero siempre recomendable, actualizamos nuestro sistema Debian 10:

~$ sudo apt update && sudo apt -y upgrade

Hecho esto ya podemos instalar Apache. El paquete que necesitamos es apache2, así que lo instalamos mediante apt:

~$ sudo apt -y install apache2

En unos instantes se descargará el paquete principal junto con todas sus dependencias. Una vez instalado todo el software, el nuevo servicio apache2 queda activado y en ejecución. Esto lo podemos comprobar mediante el comando systemctl status apache2:

como instalar el servidor web apache en debian 10 buster

Configurar el firewall para Apache en Debian 10

Si tienes activado el firewall UFW en Debian 10 y quieres permitir conexiones externas al servidor web Apache, será necesario añadir las reglas correspondientes. Para las conexiones estándar HTTP:

~$ sudo ufw allow http

Y para las conexiones seguras SSL a través de HTTPS:

~$ sudo ufw allow https

Cómo probar el funcionamiento de Apache en Debian 10

Seguramente quieras comprobar el servicio a través de un navegador, visitando la página web por defecto de Apache en Debian 10. Para ello introduce como URL la dirección IP, el nombre de máquina o dominio del servidor, localhost si estás trabajando localmente, etc.

Por ejemplo, la máquina Debian 10 sobre la que hemos realizado este tutorial es accesible en el subdominio debian10.local.lan, así que podemos usar http://debian10.local.lan como URL:

instalar el servidor web apache en debian 10 buster

Justo lo que esperábamos, la tradicional página por defecto de Apache 2.4 ahora en Debian 10.

Podemos comprobar la versión exacta de Apache que acabamos de instalar con el parámetro -v del comando apache2:

~$ sudo apache2 -v
Server version: Apache/2.4.38 (Debian)
Server built:   2021-06-10T10:13:06

Cómo configurar Apache en Debian 10

Para configurar Apache en Debian 10 Buster hay que tener en cuenta que los archivos de configuración se encuentran bajo la ruta /etc/apache2/, siendo el archivo principal de configuración /etc/apache2/apache2.conf.

Dentro de esta carpeta encontramos además directorios para archivos de configuraciones adicionales, módulos y servidores virtuales. Los directorios terminados en -available/ son los que contienen los archivos de configuración, mientras que los que terminan en -enabled/ contienen enlaces simbólicos a aquellos archivos de configuración que queramos que Apache cargue.

Es decir, un archivo en una carpeta available que no esté enlazado en la carpeta enabled correspondiente no será cargado por Apache, sólo se cargará si existe su correspondiente enlace simbólico en la carpeta enabled.

Cada vez que hagamos cambios en la configuración de Apache estos no causarán efecto hasta que se recargue la configuración del servicio, lo que haremos con systemctl:

~$ sudo systemctl reload apache2

Servidores virtuales de Apache en Debian 10

Para usar servidores virtuales de Apache en Debian 10 es necesario disponer de distintos dominios configurados para apuntar al servidor. En el caso de servidores Apache en Internet será necesario registrar y configurar estos dominios a través de servicios de registro como Namecheap (el servicio que usamos para este blog, por ejemplo):

Si trabajamos en una red local usaremos un servidor DNS local o configuraremos el archivo hosts de las máquinas que vayan a acceder al servidor web (esta última opción también servirá para el caso de trabajar en una máquina aislada).

En el ejemplo de este tutorial el servicio web responde a los subdominios debian10.local.lan y blog.debian10.local.lan, configurados en un servidor DNS local para apuntar al servidor Debian 10.

servidores virtuales (virtualhost) de apache en debian 10

Crearemos un archivo de configuración por cada servidor virtual que necesitemos. Como vimos antes, tenemos la carpeta /etc/apache2/sites-available/ para ubicar estos archivos de configuración y la carpeta /etc/apache2/sites-enabled/ para activar los servidores virtuales que queramos mediante enlaces simbólicos a sus archivos de configuración.

Servidor virtual por defecto

De hecho, la página web por defecto del sistema (que hemos visto al hacer la prueba de funcionamiento) es de por sí un servidor virtual al que responden todas las peticiones que lleguen al servidor web y no tengan otro servidor virtual específico que las atienda. El dominio configurado durante la instalación de Debian 10 también es atendido por el servidor por defecto.

El archivo de configuración del servidor virtual por defecto es /etc/apache2/sites-available/000-default.conf.

Cómo crear un nuevo servidor virtual de Apache en Debian 10

Siguiendo con el ejemplo de este tutorial, vamos a crear un servidor virtual para el subdominio blog.debian10.local.lan.

Preparando el contenido web del servidor virtual

En primer lugar crearemos el contenido del sitio web, creando la carpeta de archivos y algún archivo de prueba. Un buen lugar para este contenido sería bajo la ruta /var/www/ que está configurada por defecto para poder ser utilizada por el servidor web.

~$ sudo mkdir /var/www/blog.debian10.local.lan
~$ sudo chown $USER:$USER /var/www/blog.debian10.local.lan/

Además de crear la carpeta, opcionalmente hemos transferido su propiedad a nuestro usuario, para poder trabajar en ella sin necesidad del comando sudo. Ahora creamos el archivo HTML que será mostrado por defecto:

~$ nano /var/www/blog.debian10.local.lan/index.html

Podemos escribir cualquier contenido, un simple mensaje de bienvenida bastará:

<h1>Bienvenidos a blog.debian10.local.lan</h1>

Cómo configurar el nuevo servidor virtual

Crearemos su propio archivo de configuración:

~$ sudo nano /etc/apache2/sites-available/blog.debian10.local.lan.conf

Un ejemplo de configuración mínima podría ser el siguiente:

<VirtualHost *:80>
        ServerName blog.debian10.local.lan

        DocumentRoot /var/www/blog.debian10.local.lan

        <Directory /var/www/blog.debian10.local.lan>
                Options -Indexes
                AllowOverride all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/blog.debian10.local.lan-error.log
        CustomLog ${APACHE_LOG_DIR}/blog.debian10.local.lan-access.log combined
</VirtualHost>

La configuración consta de un bloque VirtualHost en el que se indica qué adaptadores de red aceptarán conexiones (el * indica todos) y 80 hace referencia al puerto de escucha, el puerto estándar para el protocolo HTTP.

La directiva ServerName indica el dominio al que responderá el servidor virtual.

Por su parte, DocumentRoot indica cuál es la carpeta de archivos web, donde reside nuestra página o aplicación.

El bloque Directory permite configurar ubicaciones del servidor web. En este ejemplo la directiva Options desactiva la posibilidad de mostrar el contenido (indexar) de las carpetas web si no existe un archivo índice (como index.html, index.htm, index.php, etc.) Además se permite cambiar la configuración del servidor al vuelo mediante archivos .htaccess gracias a la directiva AllowOverride.

Las directivas ErrorLog y CustomLog establecen cuáles serán los archivos de registro de errores y accesos para este servidor web. La expresión ${APACHE_LOG_DIR} se sustituye por el directorio de archivos de registro o logs configurado en Apache (/var/log/apache/ por defecto), pero se pueden especificar otras ubicaciones siempre que el servidor web pueda escribir en ellas.

Una vez guardados los cambios tendremos que activar el nuevo servidor virtual. Podemos crear el enlace simbólico necesario manualmente:

~$ sudo ln -s /etc/apache2/sites-available/blog.debian10.local.lan.conf /etc/apache2/sites-enabled/

Pero Debian 10 nos ofrece una herramienta para hacer esto mismo de forma más cómoda:

~$ sudo a2ensite blog.debian10.local.lan.conf

El resultado será el mismo, aunque la segunda opción nos recuerda que los cambios no entrarán en vigor hasta recargar la configuración del servicio:

~$ sudo systemctl reload apache2

En cualquier caso, una vez recargada la nueva configuración, podemos visitar la web del servidor virtual a través de su dominio mediante el navegador:

como crear servidores virtuales virtual host de apache en debian 10 buster

Justo como queríamos.

Configurar certificados SSL y protocolo SSL para Apache en Debian 10

Si quieres utilizar seguridad SSL en tu servidor Apache, es decir, realizar las conexiones a través de protocolo seguro HTTPS, será necesario disponer de claves y certificados que permitan cifrar e identificar la conexión. En el caso de servidores en Internet es muy importante utilizar certificados firmados por autoridades certificadoras, tales como los que puedes encontrar en proveedores profesionales como Namecheap:

SSL Certificate for just $8.88 with Namecheap

En caso de que estés trabajando en un servidor en pruebas o una red local puedes usar un certificado autofirmado generado por ti mismo con el comando openssl, indicando como parámetros el destino de la clave privada (archivo .key) y del certificado (archivo .crt):

~$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/blog.debian10.local.lan.key -out /etc/ssl/certs/blog.debian10.local.lan.crt

Este comando es interactivo y solicita cierta información que podemos incorporar opcionalmente al certificado. Es importante que el campo «Common Name» contenga el dominio del servidor virtual que estemos configurando (en este ejemplo, blog.debian10.local.lan):

...
Common Name (e.g. server FQDN or YOUR name) []:blog.debian10.local.lan
...

A continuación hay que activar el módulo SSL de Apache, que no viene activado por defecto en Debian 10:

~$ sudo a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  systemctl restart apache2

Reiniciamos Apache, tal y como indica el mensaje que acabamos de obtener. Apache ya está listo para manejar el cifrado SSL a través de conexiones HTTPS.

Ahora hay que configurar el certificado SSL para el servidor virtual. Esto es tan fácil como añadir otro bloque VirtualHost en el mismo archivo de configuración del servidor virtual que estés configurando.

Siguiendo con el ejemplo anterior, editaríamos el archivo de configuración y añadiríamos al final este bloque:

...
<VirtualHost *:443>
        ServerName blog.debian10.local.lan
        DocumentRoot /var/www/blog.debian10.local.lan

        <Directory /var/www/blog.debian10.local.lan>
                Options -Indexes
                AllowOverride all
        </Directory>

        SSLEngine On

        SSLCertificateFile /etc/ssl/certs/blog.debian10.local.lan.crt
        SSLCertificateKeyFile /etc/ssl/private/blog.debian10.local.lan.key
        ErrorLog ${APACHE_LOG_DIR}/blog.debian10.local.lan-error.log
        CustomLog ${APACHE_LOG_DIR}/blog.debian10.local.lan-access.log combined
</VirtualHost>

En el nuevo bloque VirtualHost la primera diferencia que encontramos es que especificamos el puerto de escucha con el valor 443 (en lugar de 80), que es el puerto estándar para el protocolo HTTPS.

Además añadimos una directiva SSLEngine para activar el módulo SSL en esta configuración, y a continuación indicamos la ruta de los certificados para el dominio asociado al servidor virtual. En algunos casos, si hemos obtenido el certificado a través de terceros, podría ser necesario añadir una directiva SSLCertificateChainFile con la ubicación de un tercer archivo.

Aunque en este ejemplo no se ha hecho, se puede ofrecer contenido diferente para la versión cifrada, y también archivos de registro de eventos o logs diferentes.

En cualquier caso, una vez guardados los cambios en la configuración hay que recargar la configuración de Apache.

A partir de este momento el servidor web ya puede ofrecer páginas que muestren http:// o https:// al comienzo de cada URL.

Siguiendo con el ejemplo de este tutorial, ahora usaríamos https://blog.debian10.local.lan como URL para acceder al servidor virtual mediante conexión segura.

En caso de usar un certificado autofirmado, el navegador nos advertirá que no puede comprobar la autenticidad del mismo:

como configurar ssl en apache para debian 10 buster

Normalmente, dependiendo del navegador, tendremos la opción de continuar con la conexión, de modo que podremos acceder al sitio web:

configuracion ssl de apache en debian 10 buster

Conclusión

Ahora que sabes cómo instalar Apache 2.4 en Debian 10 ya estás listo para que tu máquina sirva páginas y aplicaciones web a tu red local o a tus usuarios en Internet, en caso de estar trabajando con un VPS Debian.

En caso de preguntas, dudas, notificaciones de errores, sugerencias o mejoras sobre este artículo puedes dejarme un comentario.

Y si te ha resultado interesante esta guía sobre Apache en Debian 10 y quieres agradecérmelo, puedes hacerlo dejando una propina de 1 $ desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarme a un café:

¡Gracias!

2 comentarios en «Cómo instalar Apache en Debian 10 Buster»

  1. Hola, gracias por tu aporte, tengo un problema con PHP. El servidor no interpreta el código y lo muestra en el navegador. No sé cuál es el parámetro que hay que configurar para solucionar este error.
    Muchas gracias.
    Saludos.

    Responder

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies