Cómo administrar hosts virtuales dinámicos con Apache y el módulo mod_vhost_alias

Cómo administrar hosts virtuales dinámicos con Apache y el módulo mod_vhost_alias

El servidor web Apache tiene la capacidad de servir múltiples sitios web de la misma dirección IP, utilizando hosts virtuales. Cada host virtual se puede configurar en el archivo de configuración del servidor principal o, gracias a Incluir o el Incluir a
directivas, en su propia dedicada. Cuando aumenta el número de hosts virtuales, su gestión comienza a ser problemática. Si su configuración es bastante similar, podemos administrarlos dinámicamente, gracias a la mod_vhost_alias módulo. En este tutorial veremos cómo hacerlo.

En este tutorial aprenderás:

  • ¿Qué es un host virtual Apache?
  • Cómo verificar si el módulo mod_vhost_alias está habilitado
  • Cómo cargar el módulo mod_vhost_alias en la familia de distribuciones de Debian y Red Hat
  • Cómo administrar hosts virtuales dinámicos utilizando el módulo mod_vhost_alias

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Distribución independiente
Software Servidor web de Apache
Otro Permisos de raíz
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Una descripción general rápida del host virtual

Como ya mencionamos en la introducción, el servidor web Apache tiene la capacidad de servir múltiples sitios web utilizando hosts virtuales y la configuración DNS adecuada. La siguiente es una definición de host virtual mínima pero típica:

 Servername www.prueba.Prueba LAN Serveralias.LAN DocumentRoot/var/www/www.prueba.lan  


Esta configuración administrará las solicitudes de usuario para el www.prueba.lan dirección, que es el valor que establecemos con el Nombre del servidor directiva, pero también para prueba.lan, Cuál es el Servidoralias. Con el Raiz del documento Directiva establecemos el directorio base del que se deben servir los archivos asociados al host virtual, que en este caso es /var/www/www.prueba.lan.

Se puede definir un host virtual en el archivo de configuración del servidor principal (/etc/httpd/conf/httpd.confusión en la familia de las distribuciones de Red Hat, /etc/apache2/apache2.confusión sobre Sistemas Debian y sus derivados), o se puede escribir en su propio archivo e incluido desde la configuración principal. De hecho, si echamos un vistazo a la configuración de Apache en las distribuciones principales de Linux, podemos ver que los archivos de hosts virtuales se incluyen a través del Incluir a Directiva de algún directorio específico.

En Fedora y distribuciones relacionadas, por ejemplo, encontramos la siguiente configuración al final del archivo:

# Cargar archivos de configuración en "/etc/httpd/conf.D "Directorio, si es que hay. Incluir conf conf.d/*.confusión 

En Debian, en cambio:

# Incluya las configuraciones de host virtuales: incluido sitios de acción habilitada/*.confusión 

Podemos notar que la ruta desde la que deben incluirse los archivos es relativo a la raíz del servidor. El Incluir a La directiva se utiliza para incluir los archivos de host virtuales que deben nombrarse con el .confusión sufijo. Aquí el Incluir La directiva también podría usarse; Cuál es la diferencia entre los dos? Ambos funcionan exactamente de la misma manera, el Incluir a Sin embargo, la directiva no causa un error cuando se usan comodines (como en este caso) y no se encuentra ninguna coincidencia, o si no existe una ruta, en general.

Para que esta configuración funcione, también se debe configurar una entrada DNS adecuada. Sin embargo, si trabajamos localmente, simplemente podríamos agregar una línea en el /etc/huéspedes archivo. Por ejemplo:

127.0.0.1 www.prueba.lan 

Cuando las configuraciones de hosts virtuales comienzan a aumentar, su administración podría ser fácilmente problemática. Una posible solución a este problema es usar hosts virtuales generados dinámicamente. Veamos cómo hacerlo con el mod_vhost_alias módulo.

Cargando el módulo mod_vhost_alias

Lo primero que tenemos que hacer es verificar si el mod_vhost_alias El módulo está habilitado. El comando que queremos ejecutar para este propósito depende de la distribución que estamos utilizando. En Fedora y otra distribución de la familia Red Hat, podemos usar lo siguiente:

$ httpd -m | grep -i vhost_alias 

En Debian, en cambio:

$ apachectl -m | grep -i vhost_alias 

Pasando el -METRO opción para el httpd (o apachectl) comando, obtenemos una lista de módulos estáticos y compartidos cargados; Cubrir la salida a GREP podemos verificar si el módulo que necesitamos está en él. En caso de que el módulo no esté cargado, en Debian y sus derivados podemos ejecutar el siguiente comando:

$ sudo a2enmod vhost_alias && sudo systemctl reiniciar apache2 


El a2enmod El comando crea un enlace simbólico al /etc/apache2/mods-disponible/mod_vhost_alias.entonces presentar al /etc/apache2/mods-habilitado directorio (de manera similar a lo que el A2ensita El comando hace para las configuraciones de hosts virtuales), que es donde se cargan los módulos desde.

En la familia Red Hat de distribución, la lista de módulos base cargados está en el /etc/httpd/conf.módulos.d/00-base.confusión archivo. Cada módulo se carga con el Módulo de carga directiva. Si por alguna razón el Vhost_alias Se comenta la línea del módulo (67), simplemente elimine el comentario, guarde la modificación y vuelva a cargar el servicio HTTPD:

$ sudo systemctl reiniciar httpd 

Una vez que el módulo está habilitado, podemos continuar con la configuración real.

Creación de hosts virtuales dinámicos

La configuración que estamos creando se basa en el hecho de que el mod_vhost_alias Módulo almacena los componentes separados por puntos del nombre de host virtual solicitado dentro de algunas variables que podemos hacer referencia e interpolar en la cadena que usamos para definir la raíz del documento de host virtual. Si tomamos el www.prueba.lan Host virtual como ejemplo, tendremos:

  • %0: todo el nombre de host virtual
  • %1: "www"
  • %2: "prueba"
  • %3: "Lan"

Los números negativos también podrían usarse, por lo que, por ejemplo, tendremos:

  • %-1 La última parte del nombre, en este caso "Lan"
  • %-2 La penúltima parte, en este caso "prueba"

Incluso es posible especificar cada componente del nombre de host virtual desde un cierto puerto en adelante o hacia atrás. Por ejemplo, %2+ significa "desde la segunda parte en adelante" y %-2+ 'Causa el penúltimo componente y todos los componentes que preceden a incluirlo.

Suponiendo que queremos usar el /var/www/ Directorio Como base de todos nuestros hosts virtuales, podríamos crear la siguiente configuración en un archivo, llamémoslo Dynamic_vhost.confusión:

 UseCanonicalName Off virtualDocumentRoot "/var/www/%-2"  

Expliquemos la configuración anterior. En primer lugar, usamos el Nombre de useMánico Directiva y establecerlo en "OFF": hicimos esto para asegurarnos de que el nombre del servidor se tome del encabezado "Host:" en la solicitud HTTP. Nosotros que usamos el VirtualDocumentRoot directiva. Esta directiva es necesaria para establecer una ruta dinámica para la raíz del documento de un host virtual, mediante el uso de las variables que vimos anteriormente se evalúan al administrar una solicitud.

Cuando el www.prueba.lan Se solicita host virtual, automáticamente los archivos que se servirán se buscarán dentro del /var/www/prueba directorio. El uso del %-2 El índice negativo tiene la ventaja de que la configuración funcionará tanto con www.prueba.lan y para prueba.lan, ya que funciona al revés.

Obviamente esto es solo un ejemplo de lo que se puede lograr usando el mod_vhost_alias módulo, y puede crear la configuración que le convenga mejor.



Desventajas

Este tipo de configuración es bastante práctica si todo el host virtual que estamos administrando es bastante similar y requiere la misma configuración, pero tiene sus desventajas, lo que puede ser bastante relevante dependiendo de la situación. En primer lugar, no será posible especificar la configuración específica de VirtualHost, si no con el uso de .archivos htaccess); Este tipo de configuración también causará problemas si se usa junto con configuraciones de host virtuales estándar. Finalmente, las solicitudes de todos los hosts virtuales se registrarán en el mismo archivo.

Conclusiones

El servidor web Apache puede servir múltiples sitios web y recursos de una sola máquina gracias al uso de hosts virtuales. Cuando el número de hosts virtuales comienza a aumentar en número, puede ser difícil administrarlos si cada uno tiene su propio archivo/sección de configuración. Si tienen configuraciones similares, podemos solucionar este problema utilizando hosts virtuales generados dinámicamente, aprovechando el mod_vhost_alias módulo.

En este artículo vimos cómo verificar si este módulo está habilitado y cómo habilitarlo en las familias de distribuciones de Debian y Red Hat. También vimos cómo los componentes del nombre de host virtual se almacenan en variables y cómo usarlos para crear hosts virtuales dinámicos. Finalmente, vimos cuáles son las desventajas de usar esta configuración.

Tutoriales de Linux relacionados:

  • Cómo migrar apache a nginx convirtiendo virtualhosts en ..
  • Firefox en Linux: su conexión no es segura
  • Comparación de Linux Apache Prefork vs Worker MPMS
  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cómo instalar Ubuntu 20.04 en virtualbox
  • Lista de las mejores herramientas de Kali Linux para pruebas de penetración y ..
  • Apache IP y hosts virtuales basados ​​en nombres explicados
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?