使用和了解变量
了解如何在Apache Web Server和Dispatcher模块配置文件中利用变量的强大功能。
描述 description
环境
Adobe Experience Manager (AEM)
问题
本文档将说明如何在Apache Web Server和Dispatcher模块配置文件中利用变量的强大功能。
变量
Apache支持Dispatcher模块之后的变量和版本4.1.9。 我们可以利用这些功能执行以下操作:
- 确保特定于环境的任何内容不在配置中,而是被提取的,以确保来自开发环境的配置文件在产品中使用相同的功能输出。
- 切换功能并更改AMS提供且不允许您更改的不可变文件的日志级别。
- 根据变量(如
RUNMODE和ENV_TYPE)更改要使用的include。 - 在Apache配置和模块配置之间匹配DocumentRoot和VirtualHost DNS名称。
解决方法 resolution
-
使用基线变量
由于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 错误 示例3 — 白名单
变量
AUTHOR_WHITELIST_ENABLED和PUBLISH_WHITELIST_ENABLED可以设置为 1 以参与重写规则,这些规则包括根据IP地址允许或禁止最终用户流量的规则。 切换此功能 ON 需要与创建白名单规则文件结合使用,才能将其包含。下面是一些语法示例,说明变量如何启用白名单文件的包含,以及白名单文件示例:
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中 -
变量放置位置?
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)
代码提供的自定义变量应位于目录
/etc/httpd/conf.d/variables/内的.vars文件中这些文件可以包含任何所需的自定义变量。 以下是以下示例文件的一些语法示例:
创建您自己的变量时,文件会根据它们的内容命名它们,并遵循手册此处中提供的命名标准。 在上例中,您可以看到变量文件承载不同的DNS条目,作为要在配置文件中使用的变量。
/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 -
使用变量
现在,您已在变量文件中定义了变量,接下来您将希望了解如何在其他配置文件中正确使用它们。我们将使用上面的示例.vars文件来说明一个合适的用例。
我们要全局包括所有基于环境的变量,我们将创建文件
/etc/httpd/conf.d/000_load_env_vars.confcode 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_TYPE和RUNMODE当拉入此全局.conf文件时,将提前拉入,因为conf.d中文件的include顺序是字母数字加载顺序,文件名中的平均值000将确保它先于目录中的其他文件加载。
include语句还在文件名中使用变量。 此操作可以根据
ENV_TYPE和RUNMODE变量中的值更改它将实际加载的文件。如果
ENV_TYPE值为 dev,则要使用的文件为:/etc/httpd/conf.d/variables/sample-domain_domains_dev.vars如果
ENV_TYPE值是 阶段,则要使用的文件是:/etc/httpd/conf.d/variables/sample-domain_domains_stage.vars如果
RUNMODE值为 preview,则要使用的文件为:/etc/httpd/conf.d/variables/sample-domain_domains_preview.vars当该文件被包含时,它将允许我们使用存储在中的变量名称。
在
/etc/httpd/conf.d/available_vhosts/sample-domain.vhost文件中,我们可以置换仅适用于dev的常规语法:code language-none <VirtualHost *:80> ServerName dev.sample-domain.com ServerAlias dev.sample-domain.net利用新语法将变量的强大功能用于dev、stage和prod:
code language-none <VirtualHost *:80> ServerName ${SAMPLE_DOMAIN} ServerAlias ${SAMPLE_ALT_DOMAIN}在
/etc/httpd/conf.dispatcher.d/vhosts/sample-domain_vhosts.any文件中,我们可以置换仅适用于dev的常规语法:code language-none "dev.sample-domain.com" "dev.sample-domain.net"利用新语法将变量的强大功能用于dev、stage和prod:
code language-none "${SAMPLE_DOMAIN}" "${SAMPLE_ALT_DOMAIN}"无需在每个环境中部署不同的文件,这些变量便可以大量重复用于个性化运行设置。 实际上,您可以使用变量对配置文件进行模板化,并根据变量包含文件。