描述: | 在apache httpd运行时配置文件中提供宏 |
---|---|
状态: | 基础 |
模块标识符: | macro_module |
源文件: | mod_macro.c |
兼容性: | 在httpd 2.4.5和更高版本中可用 |
在Apache httpd运行时配置文件中提供宏,以简化创建大量相似配置块的过程。服务器启动时,将使用提供的参数来扩展宏,并与其余配置文件一起处理结果。
宏是使用<Macro>
块定义的,其中包含需要重复配置的部分,并为需要替换的部分提供变量。
例如,您可以使用宏来定义一个<VirtualHost>
块,以便定义多个相似的虚拟主机:
<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>
宏名称不区分大小写,例如httpd配置指令。但是,变量名称区分大小写。
然后,您将多次调用此宏以创建虚拟主机:
Use VHost example example.com Use VHost myhost hostname.org Use VHost apache apache.org UndefMacro VHost
Use
如<Macro>
定义所描述,在服务器启动时,这些调用中的每一个都将扩展为完整的虚拟主机。
使用该UndefMacro
指令是为了使以后使用相同变量名的宏不会导致定义冲突。
在下面的“示例”部分中可以看到此示例的更详细版本。
参数名称应与印记开始,例如$
,
%
或者@
,让他们清楚地识别,也为了协助处理与其他指令,比如核心的交互Define
指令。否则,将导致警告。但是,建议您对整个服务器配置有充分的了解,以避免在不同的范围内重复使用相同的变量,否则可能会造成混淆。
带有$
或前缀的参数%
不会转义。带参数的前缀用@
引号引起来。
避免使用包含另一个参数作为前缀的参数(例如$win
和$winter
),因为这可能在表达式求值时引起混淆。如果发生此类混淆,将使用最长的参数名称。
如果要在另一个字符串中使用值,则将参数括在大括号中很有用,以避免混淆:
<Macro DocRoot ${docroot}> DocumentRoot "/var/www/${docroot}/htdocs" </Macro>
的常见用法mod_macro
是用于创建动态生成的虚拟主机。
## 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
建议您在使用宏后取消定义它。这样可以避免在复杂的配置文件中出现混淆,因为其中变量名称可能会发生冲突。
<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 name [par1 .. parN]>
... </Macro> |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 基础 |
模块: | mod_macro |
该<Macro>
指令控制服务器运行时配置文件中宏的定义。第一个参数是宏的名称。其他参数是宏的参数。优良作法是在参数名称前加上' $%@
',而不在宏名称前加上此类字符。
<Macro LocalAccessPolicy> Require ip 10.2.16.0/24 </Macro> <Macro RestrictedAccessPolicy $ipnumbers> Require ip $ipnumbers </Macro>
描述: | 取消定义宏 |
---|---|
句法: | UndefMacro name |
内容: | 服务器配置,虚拟主机,目录 |
状态: | 基础 |
模块: | mod_macro |
该UndefMacro
指令未定义预先定义的宏。
UndefMacro LocalAccessPolicy UndefMacro RestrictedAccessPolicy
描述: | 使用宏 |
---|---|
句法: | Use name [value1 ... valueN]
|
内容: | 服务器配置,虚拟主机,目录 |
状态: | 基础 |
模块: | mod_macro |
该Use
指令控制宏的使用。指定的宏被展开。必须为其提供与宏定义中相同数量的参数。提供的值与它们相应的初始参数相关联,并在处理之前被替换。
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