mod_macro
描述: | 在 apache httpd 运行时 configuration files 中提供宏 |
状态: | Base |
模块标识符: | macro_module |
源文件: | mod_macro.c |
兼容性: | 可在 httpd 2.4.5 及更高版本中使用 |
摘要
在 Apache httpd 运行时 configuration files 中提供宏,以简化创建大量类似 configuration 块的 process。当服务器启动时,使用提供的参数扩展宏,并将结果与 configuration 文件的 rest 一起处理。
用法
宏是使用<Macro>块定义的,其中包含需要重复的 configuration 部分,以及需要替换的那些部分的变量。
对于 example,您可以使用宏来定义<VirtualHost>块,在 order 中定义多个类似的虚拟主机:
<Macro VHost $name $domain> <VirtualHost *:80> ServerName $domain ServerAlias www.$domain DocumentRoot "/var/www/vhosts/$name" ErrorLog "/var/log/httpd/$name.error_log" CustomLog "/var/log/httpd/$name.access_log" combined </VirtualHost> </Macro>
宏名称是 case-insensitive,类似于 httpd configuration 指令。但是,变量名称区分大小写。
然后,您将多次调用此宏来创建虚拟主机:
Use VHost example example.com Use VHost myhost hostname.org Use VHost apache apache.org UndefMacro VHost
在服务器启动时 time,这些使用调用中的每一个都将扩展为完整的虚拟主机,如<Macro>定义所述。
使用UndefMacro指令,以便后面使用相同变量名的宏不会导致定义冲突。
下面在示例部分中可以看到该示例的更复杂的 version。
小贴士
参数名称应以$
,%
或@
等符号开头,以便它们可以清楚地识别,并且还可以帮助处理与其他指令的交互,例如核心限定指令。否则将导致警告。但是,我们鼓励您充分了解 order 中的整个服务器 configuration,以避免在不同的范围内重用相同的变量,这可能会导致混淆。
前缀为$
或%
的参数不会被转义。带@
的参数前缀用引号括起来。
避免使用包含另一个参数作为前缀的参数(对于 example,$win
和$winter
),因为这可能会导致表达式 evaluation time 混淆。在这种混淆的事件中,使用了最长的参数 name。
如果要在另一个 string 中使用 value,将参数括在大括号中会很有用,以避免混淆:
<Macro DocRoot ${docroot}> DocumentRoot "/var/www/${docroot}/htdocs" </Macro>
例子
虚拟主机定义
mod_macro的 common 用法用于创建 dynamically-generated 虚拟主机。
## Define a VHost Macro for repetitive configurations <Macro VHost $host $port $dir> Listen $port <VirtualHost *:$port> ServerName $host DocumentRoot "$dir" # Public document root <Directory "$dir"> Require all granted </Directory> # limit access to intranet subdir. <Directory "$dir/intranet"> Require ip 10.0.0.0/8 </Directory> </VirtualHost> </Macro> ## Use of VHost with different arguments. Use VHost www.apache.org 80 /vhosts/apache/htdocs Use VHost example.org 8080 /vhosts/example/htdocs Use VHost www.example.fr 1234 /vhosts/example.fr/htdocs
删除宏定义
建议您在使用宏后取消定义宏。这避免了复杂的 configuration 文件中的混淆,其中变量名称可能存在冲突。
<Macro DirGroup $dir $group> <Directory "$dir"> Require group $group </Directory> </Macro> Use DirGroup /www/apache/private private Use DirGroup /www/apache/server admin UndefMacro DirGroup
<Macro>指令
描述: | 定义 configuration 文件宏 |
句法: | <Macro name[par1 .. parN]>...</Macro> |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_macro |
<Macro>
指令控制服务器运行时 configuration files 中宏的定义。第一个参数是宏的 name。其他 arguments 是宏的参数。最好使用任何“$%@
”前缀参数名称,而不是带有此类字符的宏名称。
<Macro LocalAccessPolicy> Require ip 10.2.16.0/24 </Macro> <Macro RestrictedAccessPolicy $ipnumbers> Require ip $ipnumbers </Macro>
UndefMacro 指令
描述: | 取消定义一个宏 |
句法: | UndefMacro name |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_macro |
UndefMacro
指令取消定义一个先前已定义的宏。
UndefMacro LocalAccessPolicy UndefMacro RestrictedAccessPolicy
使用指令
描述: | 使用宏 |
句法: | Use name[value1 ... valueN] |
Context: | server config,virtual host,目录 |
状态: | Base |
模块: | mod_macro |
Use
指令控制宏的使用。指定的宏已扩展。必须为它提供与宏定义中相同数量的 arguments。提供的值与其对应的初始参数相关联,并在处理之前被替换。
Use LocalAccessPolicy ... Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
与上面定义的宏等效,对于:
Require ip 10.2.16.0/24 ... Require ip 192.54.172.0/24 192.54.148.0/24