En esta entrada veremos cómo instalar Apache en Debian 9 Stretch paso a paso, de modo que en unos minutos dispondrás de este popular servidor web plenamente funcional sobre tu máquina personal, servidor de red o incluso VPS Debian. Vamos a configurar Apache desde los aspectos básicos hasta la creación de servidores virtuales.
Tabla de contenidos
Antes de instalar Apache en Debian 9 Stretch
Para poder instalar Apache en Debian 9 necesitaremos:
- Una instalación básica y actualizada de Debian 9 Stretch sobre la que trabajar.
- Un usuario con privilegios de sudo (o root) con el que instalar los paquetes requeridos y editar archivos de configuración del sistema.
- Conexión a Internet para descargar paquetes y dependencias.
Una vez que lo tengamos todo, abriremos una consola, local o remota, según cómo estés trabajando, y entraremos de lleno en materia.
Cómo instalar Apache en Debian 9 Stretch
Ya que vamos a instalar Apache desde los repositorios oficiales de Debian 9 Stretch y se descargarán bastantes paquetes de dependencias, la primera acción será actualizar la información de los repositorios:
~$ sudo apt update
Ahora ya sí podemos usar apt para descargar e instalar Apache2 desde los repositorios de Debian:
~$ sudo apt -y install apache2
En unos instantes, se descargará e instalará el paquete apache2 junto a todas las dependencias que necesite.
¿Qué versión de Apache tengo instalada?
Para saber la versión exacta de Apache que hemos instalado en Debian podemos consultarlo en cualquier momento desde consola:
~$ /usr/sbin/apache2 -v Server version: Apache/2.4.25 (Debian) Server built: 2019-10-13T15:43:54
Obtenemos así el número de versión y revisión instalada en el sistema, así como su fecha de compilación.
Cómo comprobar el funcionamiento de Apache en Debian 9
La instalación de los paquetes deja automáticamente el servicio Apache configurado y en funcionamiento, como podemos comprobar con el comando systemctl status apache2
:
Podemos ver que el servicio está en funcionamiento. Pulsando la tecla Q se devuelve el control a la línea de comandos.
Cómo configurar el firewall UFW para Apache en Debian 9
Si tienes activado el firewall UFW en Debian 9 Stretc, por defecto debería estar bloqueando los accesos externos al servidor web Apache.
Si quieres acceder desde la red a Apache, debes añadir una regla para el protocolo HTTP estándar (puerto TCP 80):
~$ sudo ufw allow http
Y si vas a proporcionar contenido seguro, debes añadir otra regla para el protocolo seguro HTTPS ( puerto TCP 443):
~$ sudo ufw allow https
Ya podemos ver la página web por defecto que muestra Apache en Debian 9 Stretch, introduciendo en el navegador la dirección IP del servidor o cualquier nombre de host o dominio que apunte al mismo:
Puedes remplazar la página web por defecto de Apache en Debian 9 Stretch por la tuya propia copiando los archivos que la componen en la ruta /var/www/html/.
Cómo configurar Apache en Debian 9
La configuración de Apache en Debian 9 se guarda en los archivos y directorios ubicados bajo /etc/apache2/, siendo el archivo principal de configuración apache2.conf.
Cómo recargar la configuración de Apache
Cualquier cambio que realicemos en los archivos de configuración de Apache no entrará en vigor hasta que recarguemos la configuración, lo que haremos con systemctl:
~$ sudo systemctl reload apache2
Si no ha habido errores, Apache continúa en funcionamiento con la configuración nueva. Si hay errores en los archivos de configuración, nos avisará.
Seguridad
Podemos mejorar la seguridad de Apache en Debian 9 haciendo que no ofrezca información innecesaria, como la versión del servidor web y el tipo de sistema operativo, ya que por defecto es información que un visitante podría obtener, por ejemplo con el siguiente comando:
~$ wget --server-response localhost -O /dev/null
Para ello editaremos el archivo security.conf:
~$ sudo nano /etc/apache2/conf-available/security.conf
Buscaremos la directiva ServerTokens y le asignaremos el valor más seguro:
... ServerTokens Prod ...
También ajustaremos un valor seguro para la directiva ServerSignature:
... ServerSignature Off ...
Guardamos los cambios y recargamos la configuración de Apache. La única información que ofrecerá Apache será su nombre, pero sin números de versión ni información del sistema operativo:
Cómo configurar servidores virtuales en Apache
Una de las características más importantes de un servidor web es su capacidad de poder configurar servidores virtuales o virtual hosts. Con esta característica un mismo servidor es capaz de ofrecer distintos sitios web dependiendo de con qué dominio o subdominio estamos accediendo.
Por defecto, Apache en Debian 9 ya viene configurado para utilizar servidores virtuales. De hecho el servidor que acabamos de probar es el servidor virtual por defecto, y ofrecerá la misma página a cualquier dominio o subdominio que no tenga configurado un servidor virtual propio.
La configuración de cada servidor virtual que creemos se guarda en un archivo con extensión .conf en el directorio /etc/apache2/sites-available/.
Es importante destacar que si la máquina Debian 9 está configurada con un nombre y dominio, no puedes usar ese nombre y dominio para crear un servidor virtual, ya que se usa para el servidor web por defecto. La configuración del servidor web por defecto se encuentra en /etc/apache2/sites-available/000-default.conf.
Si necesitas registrar un dominio para tu servidor virtual, te recomiendo Namecheap, el lugar donde registro y mantengo mi sitios, como por ejemplo esta web.
Para este tutorial vamos a configurar un servidor virtual para el dominio dominio.local.lan. Es un dominio ficticio para un ejemplo en una máquina o red local, pero la configuración es la misma para dominios reales y servidores en Internet.
Si necesitas más información sobre dominios locales en tu red o en tu servidor local, mírate mi entrada sobre cómo simular diferentes dominios y subdominios en tu máquina local.
Antes de empezar los ajustes, crearemos el directorio donde se alojarán los archivos web del servidor virtual. En este caso se van a situar en el directorio personal del usuario «chacho«, dentro del directorio public_html:
~$ mkdir -p public_html/dominio.local.lan
Vamos a incluir un contenido mínimo de prueba, creando un archivo public_html/dominio.local.lan/index.html con nuestro editor de texto favorito:
~$ nano public_html/dominio.local.lan/index.html
El contenido puede ser algo de lo más simple:
<h1>Bienvenido a dominio.local.lan</h1>
Ahora, con privilegios de sudo, creamos el archivo de configuración del servidor virtual. Es interesante darle como nombre el mismo dominio para el que se configura, ya que cuando tengas varios servidores virtuales ayudará mucho a su mantenimiento. Creamos, pues, /etc/apache2/sites-available/dominio.local.lan.conf:
~$ sudo nano /etc/apache2/sites-available/dominio.local.lan.conf
El contenido de este archivo puede ser el siguiente (adapta el texto si estás usando otras rutas y nomenclaturas):
<VirtualHost *:80> ServerName dominio.local.lan DocumentRoot /home/chacho/public_html/dominio.local.lan <Directory /home/chacho/public_html/dominio.local.lan> Options -Indexes AllowOverride All Require all granted </Directory> LogLevel info ErrorLog ${APACHE_LOG_DIR}/dominio.local.lan-error.log CustomLog ${APACHE_LOG_DIR}/dominio.local.lan-access.log combined </VirtualHost>
VirtualHost
La definición del servidor virtual está encerrada dentro del bloque <VirtualHost>. En su interior se encuentran las siguientes directivas:
ServerName
En esta directiva establecemos el dominio al que responderá el servidor que estamos configurando.
ServerAdmin
Opcional, la dirección de correo-e del administrador del sitio.
DocumentRoot
El directorio en el que se ubican los archivos y carpetas del sitio web.
Directory
Este bloque define el comportamiento del servidor virtual.
En Options especificamos ciertas características que permitimos o no, o modifican cómo se muestran los contenidos del sitio web. La opción -Indexes no permite mostrar el contenido de un directorio web si no existe el archivo índice (index.html o similar), provocando un error 403.
En AllowOverride establecemos si se puede o no modificar la configuración del servidor web en tiempo de ejecución, por ejemplo a través de archivos .htaccess. La opción All permite cualquier modificación.
La directiva Require all granted es necesaria porque para este ejemplo hemos situado el directorio de documentos fuera de /var/www/ y /usr/share/, los únicos sitios que permite la configuración por defecto de Apache en Debian 9. Por tanto, en cada servidor virtual habrá que indicar esta directiva si el DocumentRoot está fuera de esas ubicaciones.
LogLevel
Esta directiva determina la cantidad de mensajes que se archivan en los logs, determinando un nivel mínimo de gravedad. En el ejemplo especificamos el nivel info que es bastante «locuaz», ya que archivará registros informativos, de alarma, de error, etc.
ErrorLog
Si queremos que el archivo de errores sea propio para el servidor virtual, aquí especificamos el archivo donde lo queremos tener. La variable APACHE_LOG_DIR devuelve el directorio de registros configurado en Apache; si preferimos otro lugar basta con escribir la ruta completa y nombre de archivo.
CustomLog
El registro de acceso y peticiones. Se aplica lo mismo que en el apartado anterior para el lugar donde queremos almacenarlo.
Cómo activar un servidor virtual
Para que funcione un servidor virtual cuyo archivo de configuración acabamos de crear, es necesario activarlo con el comando a2ensite:
~$ sudo a2ensite dominio.local.lan Enabling site dominio.local.lan. To activate the new configuration, you need to run: systemctl reload apache2
Y, como nos indica la salida del comando, hay que recargar la configuración de Apache con systemctl:
~$ sudo systemctl reload apache2
Comprobar el funcionamiento del servidor virtual
La forma de probar el servidor virtual no es otra que acceder al mismo a través de un navegador, introduciendo el dominio que hemos configurado:
Justo lo que queríamos.
Cómo configurar HTTPS en Apache en Debian 9
Para utilizar seguridad SSL a través de protocolo seguro HTTPS tendremos que configurar el servidor Apache en Debian 10 para que utilice claves y certificados SSL. En el caso de que estés configurando un servidor en Internet es importante que utilices claves y certificados firmados por autoridades certificadoras, como los que puedes conseguir a través de servicios profesionales como Namecheap:
Si estás configurando un servidor web de pruebas local podrías utilizar certificados autofirmados como los que incluye Debian 9 Stretch por defecto, que será lo que haremos en el ejemplo de este tutorial.
Añadimos un bloque VirtualHost en el archivo de configuración del servidor virtual que estemos configurando:
... <VirtualHost *:443> ServerName dominio.local.lan DocumentRoot /home/chacho/public_html/dominio.local.lan <Directory /home/chacho/public_html/dominio.local.lan> Options -Indexes AllowOverride None Require all granted </Directory> SSLEngine On SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key LogLevel warn ssl:warn ErrorLog ${APACHE_LOG_DIR}/dominio.local.lan-error.log CustomLog ${APACHE_LOG_DIR}/dominio.local.lan-access.log combined </VirtualHost>
Vamos a ver las diferencias principales con el bloque que definimos para el protocolo estándar HTTP:
En primer lugar, este nuevo bloque VirtualHost especifica como puerto de escucha el 443 en lugar del 80.
Añadimos una cláusula SSLEngine que activará el módulo SSL y especificamos la ubicación de los certificados que asociaremos al servidor web. En este ejemplo usamos los certificados autofirmados que se generan durante la instalación de Debian 9, pero en un servidor web configurado para un dominio accesible desde Internet usaríamos certificados firmados por terceros.
Finalmente, en LogLevel indicamos el nivel de alertas que se registrarán en los archivos de log de Apache para las conexiones SSL.
Guardados los cambios, lo habitual sería recargar la configuración de Apache, pero si has seguido esta guía tal cual, Apache no se instala con el módulo SSL activado por defecto. Tenemos que activar el módulo SSL manualmente:
$ 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
Para que un módulo de Apache funcione es necesario reiniciar el servicio:
$ sudo systemctl restart apache2
Al reiniciar Apache se carga la nueva configuración del servidor virtual, por lo que ya podemos acceder a través de HTTPS al servidor usando https:// en lugar de http:// en la URL.
Si usas certificados autofirmados, el navegador nos advertirá de que no puede comprobar la veracidad de los mismos:
Dependiendo del navegador utilizado tendremos alguna forma para continuar con la conexión.
Se mostrará la versión segura bajo HTTPS del sitio web:
Conclusiones finales
Hemos visto rápida y fácilmente cómo instalar Apache en Debian 9 Stretch paso a paso. Las configuraciones iniciales son sencillas también, aunque conforme queramos más características y más seguridad tendremos que ir afinando.
Si estás haciendo experimentos con distintos tipos de ajustes, no olvides recargar la configuración de Apache tras cada modificación de archivos de configuración.
Si quieres comunicarme cualquier error, sugerencia, pregunta, duda o mejora sobre este artículo déjame un comentario.
Y si esta entrada te ha parecido verdaderamente interesante y quieres agradecérmelo, puedes hacerlo dejando 1 $ de propina desde PayPal:
¡Gracias!