Uso y comprensión de las variables

Aprenda a aprovechar el poder de las variables en el servidor web Apache y en los archivos de configuración del módulo Dispatcher.

Descripción description

Entorno

Adobe Experience Manager (AEM)

Problema

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

Variables

Apache admite variables y versiones 4.1.9 y posteriores del módulo de Dispatcher. Podemos aprovecharlas para hacer lo siguiente:

  • Asegúrese de que todo lo que sea específico del entorno no esté en línea en las configuraciones, sino que se extraiga para garantizar que los archivos de configuración de dev funcionen en prod con la misma salida funcional.
  • Alternar funciones y cambiar los niveles de registro de archivos inmutables que proporciona AMS y que no le permite cambiar.
  • Modifique lo que incluye usar en función de variables como RUNMODE y ENV_TYPE.
  • Hacer coincidir los nombres DNS de DocumentRoot y VirtualHost entre las configuraciones de Apache y las configuraciones de módulo.

Resolución resolution

  1. Usando variables de línea de base
    Debido a 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

    code language-none
    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 mostradas arriba AUTHOR_FORCE_SSL o PUBLISH_FORCE_SSL se pueden establecer en 1 para activar reglas de reescritura que obliguen a los usuarios finales a entrar en una solicitud http a ser redirigidos a https.

    Esta es la sintaxis del archivo de configuración que permite que funcione esta opción:

    code language-none
    <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 es lo que tiene el código para redirigir el explorador de los usuarios finales, pero la variable que se establece en 1 es lo que permite utilizar el archivo o no.

    Ejemplo 2 - Nivel de registro

    Las variables DISP_LOG_LEVEL se pueden usar para establecer 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 línea base de AEM:

    code language-none
    <IfModule disp_apache2.c>
    
      DispatcherLog    logs/dispatcher.log
    
      DispatcherLogLevel ${DISP_LOG_LEVEL}
    
    </IfModule>
    

    Si necesita aumentar el nivel de registro de Dispatcher, solo tiene que actualizar la variable ams_default.vars DISP_LOG_LEVEL al nivel que desee.

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

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3
    Nivel de registro Valor entero Valor de Word
    Trazado 4 trazar
    Depurar 3 depurar
    Información 2 información
    Advertencia 1 advertir
    Error 0 error

    Ejemplo 3 - Listas blancas

    Las variables AUTHOR_WHITELIST_ENABLED y PUBLISH_WHITELIST_ENABLED se pueden establecer en 1 para activar reglas de reescritura que incluyan reglas para permitir o impedir el tráfico del usuario final basado en la dirección IP. Alternar esta función ON debe combinarse con la creación de un archivo de reglas de lista blanca para que también 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:

    code language-none
    <VirtualHost *:80>
    
      <Directory />
    
        <If "${AUTHOR_WHITELIST_ENABLED} == 1">
    
            Include /etc/httpd/conf.d/whitelists/*_whitelist.rules
    
        </If>
    
      </Directory>
    
    </VirtualHost>
    

    sample_whitelist.rules:

    code language-none
    <RequireAny>
    
      Require ip 10.43.0.10/24
    
    </RequireAny>
    

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

  2. ¿Dónde colocar las variables?
    Argumentos de inicio del servidor web

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

    Este archivo tiene variables predefinidas como se muestra aquí:

    code language-none
    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'
    

    Esto no es algo que pueda cambiar, pero es bueno aprovecharlo 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 en su lugar se necesita un reinicio.

    Archivos de variables (.vars)

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

    Estos archivos pueden tener cualquier variable personalizada que desee. Estos son algunos ejemplos de sintaxis para los siguientes archivos de ejemplo:

    Al crear sus propias variables, asigne nombres a los archivos en función de su contenido y siga los estándares de nomenclatura proporcionados en el manual aquí. En el ejemplo anterior puede ver que el archivo de variables aloja las diferentes entradas DNS como variables para usarlas en los archivos de configuración.

    /etc/httpd/conf.d/variables/sample-domain_domains_dev.vars:

    code language-none
    Define SAMPLE_DOMAIN dev.sample-domain.com
        Define SAMPLE_ALT_DOMAIN dev.sample-domain.net
    

    /etc/httpd/conf.d/variables/sample-domain_domains_stage.vars:

    code language-none
    Define SAMPLE_DOMAIN stage.sample-domain.com
        Define SAMPLE_ALT_DOMAIN stage.sample-domain.net
    

    /etc/httpd/conf.d/variables/sample-domain_domains_prod.vars:

    code language-none
    Define SAMPLE_DOMAIN www.sample-domain.com
        Define SAMPLE_ALT_DOMAIN www.sample-domain.net
    
  3. Usando variables
    Ahora que ha definido las variables dentro de los archivos de variables, querrá saber cómo utilizarlas correctamente dentro de los demás archivos de configuración.

    Usaremos 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

    code language-none
    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 se extrae este archivo .conf global, se extraerá antes de tiempo porque el orden de inclusión de los archivos en conf.d es un orden de carga alfanumérico que significa 000 en el nombre del archivo, lo que garantiza que se cargue antes que los demás archivos del directorio.

    La instrucción include también utiliza una variable en el nombre del archivo. Esto puede cambiar el archivo que realmente cargará basándose en el valor de las variables ENV_TYPE y RUNMODE.

    Si el valor ENV_TYPE es dev, entonces el archivo que se usa es:

    /etc/httpd/conf.d/variables/sample-domain_domains_dev.vars

    Si el valor ENV_TYPE es stage, entonces el archivo que se utiliza es:

    /etc/httpd/conf.d/variables/sample-domain_domains_stage.vars

    Si el valor RUNMODE es preview, entonces el archivo que se utiliza es:

    /etc/httpd/conf.d/variables/sample-domain_domains_preview.vars

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

    En nuestro archivo /etc/httpd/conf.d/available_vhosts/sample-domain.vhost podemos intercambiar la sintaxis normal que solo funcionaba para dev:

    code language-none
    <VirtualHost *:80>
    
      ServerName    dev.sample-domain.com
    
      ServerAlias    dev.sample-domain.net
    

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

    code language-none
    <VirtualHost *:80>
    
      ServerName    ${SAMPLE_DOMAIN}
    
      ServerAlias    ${SAMPLE_ALT_DOMAIN}
    

    En nuestro archivo /etc/httpd/conf.dispatcher.d/vhosts/sample-domain_vhosts.any podemos intercambiar la sintaxis normal que solo funcionaba para dev:

    code language-none
    "dev.sample-domain.com"
    "dev.sample-domain.net"
    

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

    code language-none
    "${SAMPLE_DOMAIN}"
    "${SAMPLE_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 archivos de configuración con el uso de variables e incluir archivos basados en variables.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f