domingo, 25 de agosto de 2019

Configuracion Servidor Web en Debian



Una vez que tengamos Nuestro Debian instalado, abriremos una consola, local o remota, según cómo estés trabajando, y entraremos de lleno en materia.

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.

Ya que vamos a instalar Apache desde los repositorios oficiales de Debian 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-04-02T19:05:13

Obtenemos así el número de versión y revisión instalada en el sistema, así como su fecha de compilación.

La instalación de los paquetes deja automáticamente el servicio Apache configurado y en funcionamiento, como podemos comprobar con el comando systemctl:

~$ systemctl status apache2
● apache2.service
The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Wed 2019-05-08 14:49:07 CEST; 4min 51s ago
Main PID: 1542 (apache2)CGroup:
/system.slice/apache2.service
├─1542 /usr/sbin/apache2 -k start
├─1544 /usr/sbin/apache2 -k start
└─1545 /usr/sbin/apache2 -k start
lines 1-8/8 (END)

Podemos ver que el servicio está en funcionamiento. Pulsando la tecla Q se devuelve el control a la línea de comandos.

Ya podemos ver la página web por defecto que muestra Apache en Debian, introduciendo en el navegador la dirección IP del servidor o cualquier nombre de host o dominio que apunte al mismo:


Cómo configurar Apache en Debian
La configuración de Apache en Debian 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á.

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 mis sitios, como por ejemplo esta web.

Para este tutorial vamos a configurar un servidor virtual para el dominio dominio.local. 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

Vamos a incluir un contenido mínimo de prueba, creando un archivo public_html/dominio.local/index.htmlcon nuestro editor de texto favorito:

~$ nano public_html/dominio.local/index.html

El contenido puede ser algo de lo más simple:

<h1>Bienvenido a dominio.local</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.conf:

~$ sudo nano /etc/apache2/sites-available/dominio.local.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
DocumentRoot /home/chacho/public_html/dominio.local
<Directory /home/chacho/public_html/dominio.local>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
LogLevel info
ErrorLog ${APACHE_LOG_DIR}/dominio.local-error.log
CustomLog ${APACHE_LOG_DIR}/dominio.local-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
Enabling site dominio.local.
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:


Cómo configurar HTTPS en Apache en Debian
Para utilizar seguridad SSL a través de protocolo seguro HTTPS tendremos que añadir un bloque VirtualHost en el archivo de configuración del servidor virtual que nos interese:

<VirtualHost *:443>
ServerName dominio.local
DocumentRoot /home/chacho/public_html/dominio.local
<Directory /home/chacho/public_html/dominio.local>
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-error.log
CustomLog ${APACHE_LOG_DIR}/dominio.local-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.


Es posible que tengas que confirmar varias alertas de seguridad si estás usando certificados autofirmados, porque no están verificados por autoridades de certificación.

Conclusiones finales

Hemos visto rápida y fácilmente cómo instalar Apache en Debian 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.