使用和了解变量

描述 description

环境

Adobe Experience Manager

问题/症状

本文档将说明如何在Apache Web Server和Dispatcher模块配置文件中利用变量的强大功能。

变量

Apache支持Dispatcher模块之后的变量和版本4.1.9。 我们可以利用这些功能执行以下操作:

  • 确保特定于环境的任何内容不在配置中,而是被提取的,以确保来自开发环境的配置文件在产品中使用相同的功能输出。
  • 切换功能并更改AMS提供且不允许您更改的不可变文件的日志级别。
  • 根据以下变量更改要使用的包含 RUNMODEENV_TYPE
  • 在Apache配置和模块配置之间匹配DocumentRoot和VirtualHost DNS名称。

解决方法 resolution

  1. 使用基线变量
    由于AMS基线文件是只读和不可变的,因此有些功能可以关闭和打开,也可以通过编辑它们使用的变量进行配置。

    基线变量

    以下是文件内容的示例 /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
    

    示例1 — 强制SSL

    上面显示的变量 AUTHOR_FORCE_SSL,或 PUBLISH_FORCE_SSL 可设置为1以参与重写规则,这些规则强制最终用户在发出http请求时重定向到https。

    以下是允许此切换工作的配置文件语法:

    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
    

    如您所见,重写规则包括的代码用于重定向最终用户浏览器,而设置为1的变量则允许是否使用文件。

    示例2 — 日志记录级别

    变量 DISP_LOG_LEVEL 可用于设置您希望在运行配置中实际使用的日志级别使用的日志。

    以下是ams基线配置文件中存在的语法示例:

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

    如果您需要提高Dispatcher日志记录级别,只需更新 ams_default.vars 变量 DISP_LOG_LEVEL 达到您所需的级别。

    示例值可以是整数或单词:

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3
    日志级别 整数值 Word值
    Trace 4 trace
    调试 3 调试
    信息 2 信息
    警告 1 警告
    错误 0 error

    示例3 — 白名单

    变量 AUTHOR_WHITELIST_ENABLEDPUBLISH_WHITELIST_ENABLED 可以设置为1以参与重写规则,这些规则包括根据IP地址允许或禁止最终用户流量的规则。 在上切换此功能时,需要结合创建白名单规则文件并将其包含。

    下面是一些语法示例,说明变量如何启用白名单文件的包含,以及白名单文件示例:

    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
    

    如您所见 sample_whitelist.rules 强制执行IP限制,但切换变量可允许包含在 sample.vhost

  2. 变量应放置在何处?

    Web服务器启动参数

    AMS会将全局变量放入apache进程的启动参数中的文件中 /etc/sysconfig/httpd

    此文件具有预定义的变量,如下所示:

    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'
    

    不能更改这些内容,但可以在配置文件中利用这些内容。

    注释 — 这是因为该文件仅在服务启动时包括在内。 需要重新启动服务才能获取更改。 这意味着仅重新加载是不够的,而是需要重新启动。

    变量文件(.vars)

    代码提供的自定义变量应位于目录中的.vars文件中 /etc/httpd/conf.d/variables/

    这些文件可以包含任何所需的自定义变量。 以下是以下示例文件的一些语法示例:

    创建自己的变量时,文件会根据其内容对其进行命名,并遵循手册中提供的命名标准 此处. 在上例中,您可以看到变量文件托管不同的DNS条目,作为要在配置文件中使用的变量。

    • /etc/httpd/conf.d/variables/weretail_domains_dev.vars网站:

      code language-none
      Define WERETAIL_DOMAIN dev.weretail.com
          Define WERETAIL_ALT_DOMAIN dev.weretail.net
      
    • /etc/httpd/conf.d/variables/weretail_domains_stage.vars网站:

      code language-none
      Define WERETAIL_DOMAIN stage.weretail.com
          Define WERETAIL_ALT_DOMAIN stage.weretail.net
      
    • /etc/httpd/conf.d/variables/weretail_domains_prod.vars网站:

      code language-none
      Define WERETAIL_DOMAIN www.weretail.com
          Define WERETAIL_ALT_DOMAIN www.weretail.net
      
  3. 使用变量
    现在,您已在变量文件中定义了变量,接下来您将希望了解如何在其他配置文件中正确使用它们。

    我们将使用上面的示例.vars文件来说明一个合适的用例。

    我们希望在全局范围内包含所有基于环境的变量,我们将创建该文件 /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
    

    我们知道,当httpd服务启动时,它会拉取AMS在中设置的变量 /etc/sysconfig/httpd 并且具有变量集 ENV_TYPERUNMODE

    当拉入此全局.conf文件时,将提前拉入,因为conf.d中文件的include顺序是字母数字加载顺序,文件名中的平均值000将确保它先于目录中的其他文件加载。

    include语句还在文件名中使用变量。 这可以根据中的值更改它将实际加载的文件 ENV_TYPERUNMODE 变量。

    如果 ENV_TYPE 值为 开发 则要使用的文件为:

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

    如果 ENV_TYPE 值为 阶段 则要使用的文件为:

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

    如果 RUNMODE 值为 预览 则要使用的文件为:

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

    当该文件被包含时,它将允许我们使用存储在中的变量名称。

    在我们的 /etc/httpd/conf.d/available_vhosts/weretail.vhost 文件我们可以置换仅适用于dev的常规语法:

    code language-none
    VirtualHost *:80
    
      ServerName    dev.weretail.com
    
      ServerAlias    dev.weretail.net
    

    利用新语法将变量的强大功能用于dev、stage和prod:

    code language-none
    VirtualHost *:80
    
      ServerName    ${WERETAIL_DOMAIN}
    
      ServerAlias    ${WERETAIL_ALT_DOMAIN}
    

    在我们的 /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any 文件我们可以置换仅适用于dev的常规语法:

    code language-none
    "dev.weretail.com"
    "dev.weretail.net"
    

    利用新语法将变量的强大功能用于dev、stage和prod:

    code language-none
    "${WERETAIL_DOMAIN}"
    "${WERETAIL_ALT_DOMAIN}"
    

    无需在每个环境中部署不同的文件,这些变量便可以大量重复用于个性化运行设置。 实际上,您可以使用变量对配置文件进行模板化,并根据变量包含文件。

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