<-
Apache HTTP 服务器 2.4 > Apache模块mod_macro

Apache模块mod_macro

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

摘要

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

支持Apache!

主题

指令

错误修正清单

也可以看看

最佳

用法

宏是使用<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 指令

描述:取消定义宏
句法: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

可用语言: zh  |  fr 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。