mirror of
https://github.com/apache/httpd.git
synced 2025-07-10 08:01:00 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1737462 13f79535-47bb-0310-9956-ffa450edef68
281 lines
8.4 KiB
XML
281 lines
8.4 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
|
|
<!-- $LastChangedRevision$ -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="mod_macro.xml.meta">
|
|
|
|
<name>mod_macro</name>
|
|
<description>Provides macros within apache httpd runtime configuration files</description>
|
|
<status>Base</status>
|
|
<sourcefile>mod_macro.c</sourcefile>
|
|
<identifier>macro_module</identifier>
|
|
|
|
<summary>
|
|
|
|
<p>Provides macros within Apache httpd runtime configuration files,
|
|
to ease the process of creating numerous similar configuration
|
|
blocks. When the server starts up, the macros are expanded using the
|
|
provided parameters, and the result is processed as along with the
|
|
rest of the configuration file.</p>
|
|
|
|
</summary>
|
|
|
|
<section id="usage"><title>Usage</title>
|
|
|
|
<p>Macros are defined using <directive module="mod_macro"
|
|
type="section">Macro</directive> blocks, which contain the portion of
|
|
your configuration that needs to be repeated, complete with variables
|
|
for those parts that will need to be substituted.</p>
|
|
|
|
<p>For example, you might use a macro to define a <directive module="core"
|
|
type="section">VirtualHost</directive> block, in order to define
|
|
multiple similar virtual hosts:</p>
|
|
|
|
<highlight language="config">
|
|
<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>
|
|
</highlight>
|
|
|
|
<p>Macro names are case-insensitive, like httpd configuration
|
|
directives. However, variable names are case sensitive.</p>
|
|
|
|
<p>You would then invoke this macro several times to create virtual
|
|
hosts:</p>
|
|
|
|
<highlight language="config">
|
|
Use VHost example example.com
|
|
Use VHost myhost hostname.org
|
|
Use VHost apache apache.org
|
|
|
|
UndefMacro VHost
|
|
</highlight>
|
|
|
|
<p>At server startup time, each of these <directive module="mod_macro">Use</directive>
|
|
invocations would be expanded into a full virtualhost, as
|
|
described by the <directive module="mod_macro" type="section">Macro</directive>
|
|
definition.</p>
|
|
|
|
<p>The <directive module="mod_macro">UndefMacro</directive> directive is
|
|
used so that later macros using the same variable names don't result in
|
|
conflicting definitions.</p>
|
|
|
|
<p>A more elaborate version of this example may be seen below in the
|
|
Examples section.</p>
|
|
|
|
</section>
|
|
|
|
<section id="tips"><title>Tips</title>
|
|
|
|
<p>Parameter names should begin with a sigil such as <code>$</code>,
|
|
<code>%</code>, or <code>@</code>, so that they are clearly
|
|
identifiable, and also in order to help deal with interactions with
|
|
other directives, such as the core <directive
|
|
module="core">Define</directive> directive. Failure to do so will
|
|
result in a warning. Nevertheless, you are encouraged to have a good
|
|
knowledge of your entire server configuration in order to avoid reusing
|
|
the same variables in different scopes, which can cause confusion.</p>
|
|
|
|
<p>Parameters prefixed with either <code>$</code> or <code>%</code> are
|
|
not escaped. Parameters prefixes with <code>@</code> are escaped in
|
|
quotes.</p>
|
|
|
|
<p>Avoid using a parameter which contains another parameter as a prefix,
|
|
(For example, <code>$win</code> and <code>$winter</code>) as this may
|
|
cause confusion at expression evaluation time. In the event of such
|
|
confusion, the longest possible parameter name is used.</p>
|
|
|
|
<p>If you want to use a value within another string, it is useful to
|
|
surround the parameter in braces, to avoid confusion:</p>
|
|
|
|
<highlight language="config">
|
|
<Macro DocRoot ${docroot}>
|
|
DocumentRoot "/var/www/${docroot}/htdocs"
|
|
</Macro>
|
|
</highlight>
|
|
|
|
</section>
|
|
|
|
<section id="examples">
|
|
<title>Examples</title>
|
|
|
|
<section>
|
|
<title>Virtual Host Definition</title>
|
|
|
|
<p>A common usage of <module>mod_macro</module> is for the creation of
|
|
dynamically-generated virtual hosts.</p>
|
|
|
|
<highlight language="config">
|
|
## 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
|
|
</highlight>
|
|
</section> <!-- Vhosts -->
|
|
|
|
<section>
|
|
<title>Removal of a macro definition</title>
|
|
|
|
<p>It's recommended that you undefine a macro once you've used it. This
|
|
avoids confusion in a complex configuration file where there may be
|
|
conflicts in variable names.</p>
|
|
|
|
<highlight language="config">
|
|
<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
|
|
</highlight>
|
|
|
|
</section> <!-- UndefMacro -->
|
|
|
|
</section> <!-- Example -->
|
|
|
|
<!-- Macro -->
|
|
<directivesynopsis type="section">
|
|
<name>Macro</name>
|
|
<description>Define a configuration file macro</description>
|
|
<syntax>
|
|
<Macro <var>name</var> [<var>par1</var> .. <var>parN</var>]>
|
|
... </Macro></syntax>
|
|
<contextlist>
|
|
<context>server config</context>
|
|
<context>virtual host</context>
|
|
<context>directory</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>The <directive type="section">Macro</directive> directive controls the
|
|
definition of a macro within the server runtime configuration files.
|
|
The first argument is the name of the macro.
|
|
Other arguments are parameters to the macro. It is good practice to prefix
|
|
parameter names with any of '<code>$%@</code>', and not macro names
|
|
with such characters.
|
|
</p>
|
|
|
|
<highlight language="config">
|
|
<Macro LocalAccessPolicy>
|
|
Require ip 10.2.16.0/24
|
|
</Macro>
|
|
|
|
<Macro RestrictedAccessPolicy $ipnumbers>
|
|
Require ip $ipnumbers
|
|
</Macro>
|
|
</highlight>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<!-- Use -->
|
|
<directivesynopsis>
|
|
<name>Use</name>
|
|
<description>Use a macro</description>
|
|
<syntax>Use <var>name</var> [<var>value1</var> ... <var>valueN</var>]
|
|
</syntax>
|
|
<contextlist>
|
|
<context>server config</context>
|
|
<context>virtual host</context>
|
|
<context>directory</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>The <directive>Use</directive> directive controls the use of a macro.
|
|
The specified macro is expanded. It must be given the same number of
|
|
arguments as in the macro definition. The provided values are
|
|
associated to their corresponding initial parameters and are substituted
|
|
before processing.</p>
|
|
|
|
<highlight language="config">
|
|
Use LocalAccessPolicy
|
|
...
|
|
Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
|
|
</highlight>
|
|
|
|
<p>is equivalent, with the macros defined above, to:</p>
|
|
|
|
<highlight language="config">
|
|
Require ip 10.2.16.0/24
|
|
...
|
|
Require ip 192.54.172.0/24 192.54.148.0/24
|
|
</highlight>
|
|
</usage>
|
|
|
|
</directivesynopsis>
|
|
|
|
<!-- UndefMacro -->
|
|
<directivesynopsis>
|
|
<name>UndefMacro</name>
|
|
<description>Undefine a macro</description>
|
|
|
|
<syntax>UndefMacro <var>name</var></syntax>
|
|
<contextlist>
|
|
<context>server config</context>
|
|
<context>virtual host</context>
|
|
<context>directory</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>The <directive>UndefMacro</directive> directive undefines a macro
|
|
which has been defined before hand.</p>
|
|
|
|
<highlight language="config">
|
|
UndefMacro LocalAccessPolicy
|
|
UndefMacro RestrictedAccessPolicy
|
|
</highlight>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|