<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_macro

可用语言:  en  |  fr 

描述在 Apache httpd 运行时配置文件中提供宏
状态基础
模块标识符macro_module
源文件mod_macro.c
兼容性在 httpd 2.4.5 及更高版本中可用

摘要

在 Apache httpd 运行时配置文件中提供宏,以简化创建大量类似配置块的过程。当服务器启动时,宏使用提供的参数进行扩展,结果与配置文件的其余部分一起处理。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

用法

宏使用 <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 指令,以便以后使用相同变量名的宏不会导致定义冲突。

示例部分中可以看到此示例的更详细版本。

top

提示

参数名称应以符号开头,例如 $%@,以便它们易于识别,并且为了帮助处理与其他指令的交互,例如核心 Define 指令。如果不这样做,将导致警告。但是,建议您了解整个服务器配置,以避免在不同范围内重复使用相同的变量,这会导致混淆。

$% 开头的参数不会转义。以 @ 开头的参数在引号中转义。

避免使用包含另一个参数作为前缀的参数(例如 $win$winter),因为这可能会在表达式求值时造成混淆。如果发生此类混淆,将使用最长的可能参数名称。

如果您想在另一个字符串中使用值,将参数括在花括号中很有用,以避免混淆

<Macro DocRoot ${docroot}>
    DocumentRoot "/var/www/${docroot}/htdocs"
</Macro>
top

示例

虚拟主机定义

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
top

<Macro> 指令

描述定义配置文件宏
语法<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>
top

UndefMacro 指令

描述取消定义宏
语法UndefMacro name
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_macro

UndefMacro 指令取消定义之前定义的宏。

UndefMacro LocalAccessPolicy
UndefMacro RestrictedAccessPolicy
top

Use 指令

描述使用宏
语法Use name [value1 ... valueN]
上下文服务器配置、虚拟主机、目录
状态基础
模块mod_macro

Use 指令控制宏的使用。指定的宏将被扩展。它必须与宏定义中提供的参数数量相同。提供的 value 与它们对应的初始参数相关联,并在处理之前进行替换。

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

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些评论已实施或被认为无效/偏离主题,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应直接发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表