Cómo instalar Apache en Debian 11 Bullseye

En este artículo explicamos cómo instalar el servidor web Apache en Debian 11 Bullseye paso a paso, de forma que en unos minutos podrás trabajar con este servicio ampliamente utilizado en Internet sobre tu servidor o VPS Debian.

Antes de instalar Apache en Debian 11 Bullseye

Si quieres seguir los pasos de esta guía de instalación del servicio web Apache en Debian 11 sólo necesitarás contar con los siguientes requisitos:

  • Una máquina Debian 11 Bullseye actualizada.
  • Acceso a línea de comandos con un usuario con capacidades de sudo.
  • Conexión a Internet.

Como seguramente ya cuentas con todos estos requisitos puedes abrir una terminal de comandos y empezamos a trabajar.

Cómo instalar Apache en Debian 11 Bullseye

Para instalar el servidor web Apache en Debian 11 usaremos los repositorios de la distribución, por lo que el primer paso será actualizar su información:

~$ sudo apt update

El paquete que necesitamos es apache2, que instalamos con el comando apt:

~$ sudo apt install -y apache2

Tras la descarga e instalación de este paquete y sus dependencias se crea un nuevo servicio en Debian 11, el servicio apache2.service o simplemente apache2, que queda en ejecución y habilitado para su inicio automático en cada arranque del sistema.

Podemos comprobar el estado del servicio con el comando systemctl:

~$ sudo systemctl status apache2

como instalar apache en debian 11 bullseye

Si necesitas conocer la versión instalada de Apache puedes hacerlo con el comando apachectl:

~$ sudo apachectl -v
Server version: Apache/2.4.48 (Debian)
Server built:   2021-08-12T11:51:47

Configurar el firewall

En caso de tenerlo activado, si queremos acceder desde red será necesario configurar el firewall de Debian 11 para Apache añadiendo las reglas necesarias. En el caso de usar UFW permitiríamos las conexiones HTTP estándar con el siguiente comando:

~$ sudo ufw allow http

Y para las conexiones seguras HTTPS haríamos lo correspondiente:

~$ sudo ufw allow https

Cómo probar el servicio web

Para probar Apache en Debian 11 Bullseye desde un navegador bastará con indicar la dirección IP, nombre DNS, dominio, localhost (si accedemos localmente), etc.

Por ejemplo, la máquina Debian 11 que hemos utilizado para preparar este tutorial es accesible en el subdominio debian11.local.lan, así que podemos utilizar http://debian11.local.lan como URL:

instalar apache en debian 11 bullseye

La página que se muestra por defecto, además de demostrar el funcionamiento del servicio, ofrece información sobre la organización de los archivos de configuración de Apache en Debian 11 y del lugar donde se almacena dicha página por defecto, por si queremos sustituirla por nuestro propio sitio web.

Cómo configurar Apache en Debian 11 Bullseye

A la hora de configurar Apache en Debian 11 es importante conocer la ubicación y organización de sus archivos de configuración que, como hemos visto antes, se distribuyen bajo la ruta /etc/apache2/, siendo apache2.conf el archivo principal y desde el que se enlaza el resto.

Encontraremos también una serie de subdirectorios terminados en los sufijos -available/ y -enabled/, donde se almacenan distintas configuraciones. En los directorios «available» se guardan los archivos de configuración como tales, pero no se tienen en cuenta a no ser que existan enlaces simbólicos que se referencien desde los directorios «enabled«.

Por tanto activar una de estas configuraciones equivale a crear un enlace simbólico, mientras que eliminando dicho enlace se desactivaría. Para evitar tener que crear y eliminar enlaces simbólicos de forma manual, Apache en Debian 11 ofrecer una serie de comandos a2en* (a2ensite, a2enmod, etc.) y a2dis* (a2dissite, a2dismod, etc.) que realizan estas operaciones proporcionándoles el nombre del archivo de configuración.

Cualquier cambio en la configuración necesitará que el servicio la vuelva a cargar, mediante el comando systemctl:

~$ sudo systemctl reload apache2

Otros cambios (como la carga o descarga de módulos de Apache) exigirán el reinicio del servicio:

~$ sudo systemctl restart apache2

Seguridad SSL

Una de las primeras configuraciones que querremos realizar, especialmente en sitios web ofrecidos desde Intenet, es poder usar conexiones seguras HTTPS mediante la utilización de claves y certificados SSL.

En el caso de servidores Debian 11 en Internet es importante emplear certificados SSL firmados por autoridades certificadoras, del tipo que ofrecen servicios profesionales como Namecheap:

SSL Certificate for just $8.88 with Namecheap

Si se trata de un servidor web local, en pruebas, etc. se puede empezar a experimentar con certificados autofirmados creados por nosotros mismos con el comando openssl:

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

Los parámetros keyout y out de este comando indican la ruta y nombre de la clave privada y el certificado para nuestro sitio. Este comando incorporará de forma interactiva cierta información al certificado. Es especialmente importante que en el apartado «Common Name» se especifique el dominio o nombre DNS que se usará para acceder al servicio web:

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

En cualquier caso, con estos archivos ya creados o instalados, será necesario activar el módulo SSL de Apache, que por defecto no se encuentra habilitado en Debian 11:

~$ sudo a2enmod ssl

La salida de este comando indica que es necesario reiniciar el servidor web para aplicar la nueva configuración, pero no lo haremos aún. Es necesario realizar algunos ajustes y activar la configuración de la versión HTTPS del sitio web por defecto, guardada en el archivo sites-available/default-ssl.conf:

~$ sudo nano /etc/apache2/sites-available/default-ssl.conf

En este archivo buscaremos las siguientes directivas:

...
        SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
...

La configuración por defecto incluye un certificado y una clave privada que funcionan perfectamente; sin embargo, cambiaremos los valores por defecto por las rutas de los archivos de certificado y clave (ya sean autofirmados o firmados por autoridades certificadoras):

...
        SSLCertificateFile      /etc/ssl/certs/debian11.local.lan.crt
        SSLCertificateKeyFile   /etc/ssl/private/debian11.local.lan.key
...

En el caso de certificados firmados es posible que se suministre adicionalmente un archivo de cadena, para lo cual buscaríamos la siguiente directiva:

...
        #SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt
...

La activaríamos eliminando el carácter # inicial y cambiaríamos su valor por defecto indicando la ruta de dicho archivo de cadena.

Hechos todos los cambios necesarios guardamos y cerramos este archivo.

Ya podemos activar la configuración de la versión segura del sitio web por defecto:

~$ sudo a2ensite default-ssl.conf

Y ahora sí reiniciamos el servicio:

~$ sudo systemctl restart apache2

Para probar la conexión HTTPS bastará cambiar http:// por https:// en la URL con la que accedemos al servidor web.

En el ejemplo de este tutorial, ahora usaríamos https://debian11.local.lan como URL.

Si hemos utilizado certificados autofirmados, el navegador mostrará una advertencia:

como instalar y configurar el servidor web apache en debian 11 bullseye

Esto es normal, debido a que el navegador no puede verificar la procedencia ni autenticidad del certificado. Entendiendo esto, suele haber alguna forma de continuar con la conexión de modo que finalmente se muestra la versión segura del sitio:

como configurar https con ssl en apache para debian 11 bullseye

¡Justo lo que queríamos!

Servidores virtuales

Es posible que quieras servir distintos sitios web desde el mismo servidor web utilizando distintos dominios o nombres DNS. Para ello, obviamente debes disponer de dichos dominios configurados de modo que apunten a la dirección IP del servidor. En el caso de sitios en Internet debes registrar y configurar estos dominios en algún servicio como Namecheap (el servicio que usamos para este blog, por ejemplo):

En caso de redes locales deberás disponer de un servicio DNS en el que configurar los dominios, aunque para pruebas locales bastará con configurar el archivo hosts del sistema en cada máquina cliente.

En el ejemplo de este tutorial usaremos además de debian11.local.lan para el sitio por defecto, el subdominio blog.debian11.local.lan para un servidor virtual independiente.

como configurar servidores virtuales en apache para debian 11 bullseye

Ambos subdominios están configurados en el servicio DNS local apuntando a la misma máquina Debian 11.

Dejaremos el primer subdominio para el sitio web por defecto que, de hecho, no es más que un servidor virtual configurado en el archivo sites-available/000-default.conf.

Para el segundo subdominio creamos un nuevo archivo de configuración de servidor virtual:

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

En este archivo incluiremos una configuración básica como esta:

<VirtualHost *:80>
        ServerName blog.debian11.local.lan
        DocumentRoot /var/www/blog.debian11.local.lan

        <Directory /var/www/blog.debian11.local.lan>
        </Directory>

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

Se trata de un bloque VirtualHost que contiene las directivas que configuran aspectos como:

  • El dominio, subdominio o nombre DNS al que responderá este servidor virtual.
  • El directorio que contendrá los archivos del sitio web.
  • Un bloque Directory en el que añadir (opcionalmente) configuraciones exclusivas para el directorio especificado.
  • La ruta y nombre de los archivos de registro de errores y accesos al servidor virtual.

Terminados estos ajustes guardamos y cerramos el archivo.

Antes de aplicar la configuración debemos asegurarnos de que exista el contenido web referenciado en la configuración.

Creamos para ello el directorio de documentos indicado en DocumentRoot:

~$ sudo mkdir /var/www/blog.debian11.local.lan

E incluimos algún contenido web, en este caso un simple archivo index.html:

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

Bastará con que el archivo HTML muestre algún mensaje identificativo:

<h1>Bienvenidos a blog.debian11.local.lan</h1>
<small>Powered by Apache on Debian 11</small>

Con todo listo, activamos el nuevo servidor virtual con el comando a2ensite:

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

Y recargamos la configuración del servicio web:

~$ sudo systemctl reload apache2

Ahora ya podemos visitar de nuevo los distintos dominios y obtendremos sus correspondientes sitios web:

servidores virtuales de apache en debian 11 bullseye

SSL y servidores virtuales

Si queremos ofrecer el nuevo sitio virtual de forma segura, mediante HTTPS, editaremos el archivo de configuración:

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

Al final del mismo añadimos un nuevo bloque VirtualHost similar al siguiente:

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

        <Directory /var/www/blog.debian11.local.lan>
        </Directory>

        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/blog.debian11.local.lan.crt
        SSLCertificateKeyFile /etc/ssl/private/blog.debian11.local.lan.key

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

Observa que las únicas diferencias son el puerto especificado en la apertura del bloque VirtualHost (el puerto HTTPS estándar, el 443) y las directivas SSL que activan el modo seguro y cargan los archivos de certificado y clave. Obviamente debemos tener preparados de antemano dichos archivos, ya sean firmados o autofirmados.

Nada impide que configures archivos de registro distintos para las versiones HTTP y HTTPS, o contenido web distinto a través de DocumentRoot, pero no es usual.

Hechos todos los ajustes recargamos de nuevo el servicio y accedemos a la versión segura de los distintos sitios configurados:

servidores virtuales con https en apache para debian 11

¡Funcionando!

Conclusión

Ahora que sabes cómo instalar y configurar Apache en Debian 11 Bullseye ya puedes mostrar contenido web usando tu servidor o VPS, aprovechando los recursos de tu máquina para ofrecer distintos sitios mediante servidores virtuales y conexiones cifradas mediante SSL.

En caso de dudas, preguntas, sugerencias, etc. puedes dejar un comentario. Los comentarios están moderados, pero se revisan prácticamente a diario.

Y si ya funciona el servicio web en tu máquina gracias a esta guía y quieres agradecérnoslo, puedes ayudarnos a mantener este sitio dejando 1 $ de propina desde PayPal:

¡Gracias!

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