Uso y comprensión de las variables

Descripción

Este documento explicará cómo puede aprovechar el poder de las variables en el servidor web de Apache y en los archivos de configuración del módulo de Dispatcher.

Variables

Apache admite variables y desde la versión 4.1.9 del módulo Dispatcher también las admite.

Podemos aprovecharlas para hacer un montón de cosas útiles como:

  • Asegúrese de que todo lo que sea específico del entorno no esté en línea en las configuraciones, sino extraído para asegurarse de que los archivos de configuración de dev funcionen en prod con la misma salida funcional.
  • Alternar características y niveles de registro de cambios de archivos inmutables que proporciona AMS y que no le permitirán cambiar.
  • Modificar qué incluye usar en función de variables como RUNMODE y ENV_TYPE
  • Haga coincidir los nombres DNS de DocumentRoot y VirtualHost entre las configuraciones de Apache y las configuraciones de módulo.

Resolución



Uso de variables de línea de base



 


Debido al hecho de que los archivos de línea de base de AMS son de solo lectura e inmutables, hay funciones que se pueden desactivar y activar, así como configurarse editando las variables que consumen.




 

Variables de línea de base



 


Este es un ejemplo del contenido del archivo /etc/httpd/conf.d/variables/ams_default.vars





 



1
2
3
4
5
Define DISP_LOG_LEVEL info Define AUTHOR_WHITELIST_ENABLED 0 Define PUBLISH_WHITELIST_ENABLED 0 Define AUTHOR_FORCE_SSL 1 Define PUBLISH_FORCE_SSL 0






 

Ejemplo 1: Forzar SSL



 


Las variables que se muestran arriba AUTHOR_FORCE_SSLPUBLISH_FORCE_SSL se puede establecer en 1 para establecer reglas de reescritura que obliguen a los usuarios finales a redirigir a https cuando accedan a una solicitud http

Esta es la sintaxis del archivo de configuración que permite que funcione este conmutador:





 



1
2
3
4
5
6
7
8
/VirtualHost *:80      IfModule mod_rewrite.c          ReWriteEngine    on          If "${PUBLISH_FORCE_SSL} == 1"              Include /etc/httpd/conf.d/rewrites/forcessl_rewrite.rules          /If      /IfModule /VirtualHost






 


Como puede ver, las reglas de reescritura incluyen lo que tiene el código para redirigir el navegador del usuario final, pero la variable que se establece en 1 es lo que permite que el archivo se utilice o no




 

Ejemplo 2 - Nivel de registro



 


Las variables DISP_LOG_LEVEL se puede utilizar para configurar lo que desea tener para el nivel de registro que se utiliza realmente en la configuración en ejecución.

Este es el ejemplo de sintaxis que existe en los archivos de configuración de la línea base de ams:





 



1
2
3
4
IfModule disp_apache2.c      DispatcherLog    logs/dispatcher.log      DispatcherLogLevel ${DISP_LOG_LEVEL} /IfModule






 


Si necesita aumentar el nivel de registro de Dispatcher, simplemente actualice la variable ams_default.vars DISP_LOG_LEVEL hasta el nivel que desee.

Los valores de ejemplo pueden ser un número entero o la palabra:




 

Nivel de registro Valor entero Valor de palabra
Seguimiento 4 trace
Depuración 3 depurar
Información 2 información
Advertencia 1 avisar
Error 0 error




 

Ejemplo 3: Listas blancas



 


Las variables AUTHOR_WHITELIST_ENABLED y PUBLISH_WHITELIST_ENABLED se puede establecer en 1 para activar reglas de reescritura que incluyan reglas para permitir o no el tráfico del usuario final en función de la dirección IP.  La activación de esta función debe combinarse con la creación de un archivo de reglas de la lista blanca para que se incluya.

A continuación se muestran algunos ejemplos de sintaxis de cómo la variable habilita las inclusiones de los archivos de la lista blanca y un ejemplo de archivo de la lista blanca

sample.vhost:





 



1
2
3
4
5
6
7
VirtualHost *:80      Directory /          If "${AUTHOR_WHITELIST_ENABLED} == 1"              Include /etc/httpd/conf.d/whitelists/*_whitelist.rules          /If      /Directory /VirtualHost






 


sample_whitelist.rules:





 



1
2
3
RequireAny    Require ip 10.43.0.10/24 /RequireAny






 


Como puede ver, la variable sample_whitelist.rules aplica la restricción de IP, pero al alternar la variable se permite incluirla en la variable sample.vhost




 

Dónde colocar las variables



 

Argumentos de inicio del servidor web



 


AMS pondrá variables globales en los argumentos de inicio del proceso Apache dentro del archivo /etc/sysconfig/httpd

Este archivo tiene variables predefinidas como las que se muestran aquí:





 



1
2
3
4
5
6
7
8
AUTHOR_IP="10.43.0.59" AUTHOR_PORT="4502" AUTHOR_DOCROOT='/mnt/var/www/author' PUBLISH_IP="10.43.0.20" PUBLISH_PORT="4503" PUBLISH_DOCROOT='/mnt/var/www/html' ENV_TYPE='dev' RUNMODE='dev'






 


No es algo que pueda cambiar, pero es bueno aprovechar en sus archivos de configuración

Nota:

Debido al hecho de que este archivo solo se incluye cuando se inicia el servicio.  Es necesario reiniciar el servicio para recoger los cambios.  Lo que significa que una recarga no es suficiente, pero se necesita un reinicio





 

Archivos de variables (.vars)



 


Las variables personalizadas proporcionadas por su código deben incluirse en .vars archivos dentro del directorio /etc/httpd/conf.d/variables/

Estos archivos pueden tener cualquier variable personalizada que desee y se pueden ver algunos ejemplos de sintaxis en los siguientes archivos de ejemplo

/etc/httpd/conf.d/variables/weretail_domains_dev.vars:





 



1
2
Define WERETAIL_DOMAIN dev.weretail.com Define WERETAIL_ALT_DOMAIN dev.weretail.net






 


/etc/httpd/conf.d/variables/weretail_domains_stage.vars:





 



1
2
Define WERETAIL_DOMAIN stage.weretail.com Define WERETAIL_ALT_DOMAIN stage.weretail.net






 


/etc/httpd/conf.d/variables/weretail_domains_prod.vars:





 



1
2
Define WERETAIL_DOMAIN www.weretail.com Define WERETAIL_ALT_DOMAIN www..weretail.net






 


Al crear sus propias variables, nombre los archivos según su contenido y siga los estándares de nomenclatura que se proporcionan en el manual here.  En el ejemplo anterior puede ver que el archivo de variables aloja las diferentes entradas DNS como variables para usar en los archivos de configuración.




 

Uso de variables



 


Ahora que ha definido las variables dentro de los archivos de variables, querrá saber cómo usarlas correctamente dentro de los demás archivos de configuración.

Utilizaremos los archivos .vars de ejemplo de arriba para ilustrar un caso de uso adecuado.

Queremos incluir todas las variables basadas en el entorno globalmente, crearemos el archivo /etc/httpd/conf.d/000_load_env_vars.conf





 



1
2
Include /etc/httpd/conf.d/variables/*_${ENV_TYPE}.vars Include /etc/httpd/conf.d/variables/*_${RUNMODE}.vars






 


Sabemos que cuando el servicio httpd se inicia, extrae las variables establecidas por AMS en /etc/sysconfig/httpd y tiene el conjunto de variables de ENV_TYPE y RUNMODE

Cuando este archivo global .conf se incorpora, se extrae pronto porque el orden de inclusión de los archivos en conf.d es alfanumérico de carga, significa que 000 en el nombre del archivo asegurará que se cargue antes que los demás archivos del directorio.

La sentencia include también está usando una variable en el nombre del archivo.  Esto puede cambiar qué archivo cargará en función del valor que haya en las variables ENV_TYPE y RUNMODE.

Si la variable ENV_TYPE el valor es dev a continuación, el archivo que se utiliza es:

/etc/httpd/conf.d/variables/weretail_domains_dev.vars

Si la variable ENV_TYPE el valor es fase a continuación, el archivo que se utiliza es:

/etc/httpd/conf.d/variables/weretail_domains_stage.vars

Si el valor de RUNMODE es vista previa a continuación, el archivo que se utiliza es:

/etc/httpd/conf.d/variables/weretail_domains_preview.vars

Cuando ese archivo se incluya, nos permitirá usar los nombres de las variables que se almacenaron dentro de.

En nuestra /etc/httpd/conf.d/available_vhosts/weretail.vhost podemos intercambiar la sintaxis normal que solo funcionaba para dev:





 



1
2
3
VirtualHost *:80      ServerName    dev.weretail.com      ServerAlias    dev.weretail.net






 


Con una nueva sintaxis que utiliza el poder de las variables para trabajar para dev, stage y prod:





 



1
2
3
VirtualHost *:80      ServerName    ${WERETAIL_DOMAIN}      ServerAlias    ${WERETAIL_ALT_DOMAIN}






 


En nuestra /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any podemos intercambiar la sintaxis normal que solo funcionaba para dev:





 



1
2
"dev.weretail.com" "dev.weretail.net"






 


Con una nueva sintaxis que utiliza el poder de las variables para trabajar para dev, stage y prod:





 



1
2
"${WERETAIL_DOMAIN}" "${WERETAIL_ALT_DOMAIN}"






 


Estas variables tienen una gran cantidad de reutilización para individualizar la configuración de ejecución sin tener que tener diferentes archivos implementados por entorno.  Básicamente, puede crear plantillas de los archivos de configuración mediante el uso de variables e incluir archivos basados en variables.

En esta página