使用和了解变量
描述 description
环境
Adobe Experience Manager
问题/症状
本文档将说明如何在Apache Web Server和Dispatcher模块配置文件中利用变量的强大功能。
变量
Apache支持Dispatcher模块之后的变量和版本4.1.9。 我们可以利用这些功能执行以下操作:
- 确保特定于环境的任何内容不在配置中,而是被提取的,以确保来自开发环境的配置文件在产品中使用相同的功能输出。
- 切换功能并更改AMS提供且不允许您更改的不可变文件的日志级别。
- 根据以下变量更改要使用的包含
RUNMODE
和ENV_TYPE
- 在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 error 示例3 — 白名单
变量
AUTHOR_WHITELIST_ENABLED
和PUBLISH_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
-
变量应放置在何处?
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
-
-
使用变量
现在,您已在变量文件中定义了变量,接下来您将希望了解如何在其他配置文件中正确使用它们。我们将使用上面的示例.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_TYPE
和RUNMODE
当拉入此全局.conf文件时,将提前拉入,因为conf.d中文件的include顺序是字母数字加载顺序,文件名中的平均值000将确保它先于目录中的其他文件加载。
include语句还在文件名中使用变量。 这可以根据中的值更改它将实际加载的文件
ENV_TYPE
和RUNMODE
变量。如果
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}"
无需在每个环境中部署不同的文件,这些变量便可以大量重复用于个性化运行设置。 实际上,您可以使用变量对配置文件进行模板化,并根据变量包含文件。