<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Dynamically Configured Mass Virtual Hosting - Apache HTTP Server Version 2.5</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div id="preamble"><h1>Dynamically Configured Mass Virtual Hosting</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/vhosts/mass.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/vhosts/mass.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>


    <p>This document describes how to efficiently serve an
    arbitrary number of virtual hosts with the Apache HTTP Server. A
    <a href="../rewrite/vhosts.html">separate document</a> discusses using
    <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> to create dynamic mass virtual hosts.
    </p>

</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#motivation">Motivation</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#overview">Overview</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#simple">Dynamic Virtual Hosts with
mod_vhost_alias</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#homepages">Simplified Dynamic Virtual Hosts</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#combinations">Using Multiple Virtual
  Hosting Systems on the Same Server</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#ipbased">More Efficient IP-Based Virtual Hosting</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Mass virtual hosts with
mod_rewrite</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#macro">Mass virtual hosts with mod_macro</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="motivation" id="motivation">Motivation</a> <a title="Permanent link" href="#motivation" class="permalink">&para;</a></h2>

    <p>The techniques described here are of interest if your
    <code>httpd.conf</code> contains many
    <code>&lt;VirtualHost&gt;</code> sections that are
    substantially the same, for example:</p>

<pre class="prettyprint lang-config">&lt;VirtualHost 111.22.33.44&gt;
    ServerName                 customer-1.example.com
    DocumentRoot        "/www/hosts/customer-1.example.com/docs"
    ScriptAlias  "/cgi-bin/"  "/www/hosts/customer-1.example.com/cgi-bin"
&lt;/VirtualHost&gt;

&lt;VirtualHost 111.22.33.44&gt;
    ServerName                 customer-2.example.com
    DocumentRoot        "/www/hosts/customer-2.example.com/docs"
    ScriptAlias  "/cgi-bin/"  "/www/hosts/customer-2.example.com/cgi-bin"
&lt;/VirtualHost&gt;

&lt;VirtualHost 111.22.33.44&gt;
    ServerName                 customer-N.example.com
    DocumentRoot        "/www/hosts/customer-N.example.com/docs"
    ScriptAlias  "/cgi-bin/"  "/www/hosts/customer-N.example.com/cgi-bin"
&lt;/VirtualHost&gt;</pre>


    <p>We wish to replace these multiple
    <code>&lt;VirtualHost&gt;</code> blocks with a mechanism
    that works them out dynamically. This has a number of
    advantages:</p>

    <ol>
      <li>Your configuration file is smaller, so Apache starts
      more quickly and uses less memory. Perhaps more importantly, the
      smaller configuration is easier to maintain, and leaves less room
      for errors.</li>

      <li>Adding virtual hosts is simply a matter of creating the
      appropriate directories in the filesystem and entries in the
      DNS - you don't need to reconfigure or restart Apache.</li>
    </ol>

    <p>The main disadvantage is that you cannot have a different log file for
    each virtual host; however, if you have many virtual hosts, doing
    this can be a bad idea anyway, because of the <a href="fd-limits.html">number of file descriptors needed</a>.
    It is better to <a href="../logs.html#piped">log to a pipe or a fifo</a>,
    and arrange for the process at the other end to split up the log
    files into one per virtual host. One example of such a process can
    be found in the <a href="../programs/split-logfile.html">split-logfile</a>
    utility.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="overview" id="overview">Overview</a> <a title="Permanent link" href="#overview" class="permalink">&para;</a></h2>

    <p>A virtual host is defined by two pieces of information: its
    IP address, and the contents of the <code>Host:</code> header
    in the HTTP request. The dynamic mass virtual hosting technique
    used here is based on automatically inserting this information into the
    pathname of the file that is used to satisfy the request. This
    can be most easily done by using <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>
    with Apache httpd. Alternatively,
    <a href="../rewrite/vhosts.html">mod_rewrite can
    be used</a>.</p>
    <p>Both of these modules are disabled by default; you must enable
    one of them when configuring and building Apache httpd if you want to
    use this technique.</p>

    <p>A couple of things need to be determined from the request in
    order to make the dynamic
    virtual host look like a normal one. The most important is the
    server name, which is used by the server to generate
    self-referential URLs etc. It is configured with the
    <code>ServerName</code> directive, and it is available to CGIs
    via the <code>SERVER_NAME</code> environment variable. The
    actual value used at run time is controlled by the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>
    setting. With <code>UseCanonicalName Off</code>, the server name
    is taken from the contents of the <code>Host:</code> header in the
    request. With <code>UseCanonicalName DNS</code>, it is taken from a
    reverse DNS lookup of the virtual host's IP address. The former
    setting is used for name-based dynamic virtual hosting, and the
    latter is used for IP-based hosting. If httpd cannot work out
    the server name because there is no <code>Host:</code> header,
    or the DNS lookup fails, then the value configured with
    <code>ServerName</code> is used instead.</p>

    <p>The other thing to determine is the document root (configured
    with <code>DocumentRoot</code> and available to CGI scripts via the
    <code>DOCUMENT_ROOT</code> environment variable). In a normal
    configuration, this is used by the core module when
    mapping URIs to filenames, but when the server is configured to
    do dynamic virtual hosting, that job must be taken over by another
    module (either <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> or
    <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>), which has a different way of doing
    the mapping. Neither of these modules is responsible for
    setting the <code>DOCUMENT_ROOT</code> environment variable so
    if any CGIs or SSI documents make use of it, they will get a
    misleading value.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="simple" id="simple">Dynamic Virtual Hosts with
mod_vhost_alias</a> <a title="Permanent link" href="#simple" class="permalink">&para;</a></h2>

    <p>This extract from <code>httpd.conf</code> implements the
    virtual host arrangement outlined in the <a href="#motivation">Motivation</a> section above
    using <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</p>

<pre class="prettyprint lang-config"># get the server name from the Host: header
UseCanonicalName Off

# this log format can be split per-virtual-host based on the first field
# using the split-logfile utility.
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot "/www/hosts/%0/docs"
VirtualScriptAlias  "/www/hosts/%0/cgi-bin"</pre>


    <p>This configuration can be changed into an IP-based virtual
    hosting solution by just turning <code>UseCanonicalName
    Off</code> into <code>UseCanonicalName DNS</code>. The server
    name that is inserted into the filename is then derived from
    the IP address of the virtual host. The variable <code>%0</code>
    references the requested servername, as indicated in the
    <code>Host:</code> header.</p>

<p>See the <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> documentation for more usage
examples.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="homepages" id="homepages">Simplified Dynamic Virtual Hosts</a> <a title="Permanent link" href="#homepages" class="permalink">&para;</a></h2>

    <p>This is an adjustment of the above system, tailored for an
    ISP's web hosting server. Using <code>%2</code>,
    we can select substrings of the server name to
    use in the filename so that, for example, the documents for
    <code>www.user.example.com</code> are found in
    <code>/home/user/www</code>. It uses a single <code>cgi-bin</code>
    directory instead of one per virtual host.</p>

<pre class="prettyprint lang-config">UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# include part of the server name in the filenames
VirtualDocumentRoot "/home/%2/www"

# single cgi-bin directory
ScriptAlias  "/cgi-bin/"  "/www/std-cgi/"</pre>


    <p>There are examples of more complicated
    <code>VirtualDocumentRoot</code> settings in the
    <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> documentation.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="combinations" id="combinations">Using Multiple Virtual
  Hosting Systems on the Same Server</a> <a title="Permanent link" href="#combinations" class="permalink">&para;</a></h2>

    <p>With more complicated setups, you can use httpd's normal
    <code>&lt;VirtualHost&gt;</code> directives to control the
    scope of the various virtual hosting configurations. For
    example, you could have one IP address for general customers' homepages,
    and another for commercial customers, with the following setup.
    This can be combined with conventional
    <code>&lt;VirtualHost&gt;</code> configuration sections, as shown
    below.</p>

<pre class="prettyprint lang-config">UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon

&lt;Directory "/www/commercial"&gt;
    Options FollowSymLinks
    AllowOverride All
&lt;/Directory&gt;

&lt;Directory "/www/homepages"&gt;
    Options FollowSymLinks
    AllowOverride None
&lt;/Directory&gt;

&lt;VirtualHost 111.22.33.44&gt;
    ServerName www.commercial.example.com

    CustomLog "logs/access_log.commercial" vcommon

    VirtualDocumentRoot "/www/commercial/%0/docs"
    VirtualScriptAlias  "/www/commercial/%0/cgi-bin"
&lt;/VirtualHost&gt;

&lt;VirtualHost 111.22.33.45&gt;
    ServerName www.homepages.example.com

    CustomLog "logs/access_log.homepages" vcommon

    VirtualDocumentRoot "/www/homepages/%0/docs"
    ScriptAlias         "/cgi-bin/" "/www/std-cgi/"
&lt;/VirtualHost&gt;</pre>


<div class="note">
    <h3>Note</h3>
    <p>If the first VirtualHost block does <em>not</em> include a
    <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> directive, the reverse
    DNS of the relevant IP will be used instead.
    If this is not the server name you
    wish to use, a bogus entry (eg. <code>ServerName
    none.example.com</code>) can be added to get around this
    behaviour.</p>
</div>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="ipbased" id="ipbased">More Efficient IP-Based Virtual Hosting</a> <a title="Permanent link" href="#ipbased" class="permalink">&para;</a></h2>

    <p>The configuration changes suggested to turn <a href="#simple">the first
    example</a> into an IP-based virtual hosting setup result in
    a rather inefficient setup. A new DNS lookup is required for every
    request. To avoid this overhead, the filesystem can be arranged to
    correspond to the IP addresses, instead of to the host names, thereby
    negating the need for a DNS lookup. Logging will also have to be adjusted
    to fit this system.</p>

<pre class="prettyprint lang-config"># get the server name from the reverse DNS of the IP address
UseCanonicalName DNS

# include the IP address in the logs so they may be split
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# include the IP address in the filenames
VirtualDocumentRootIP "/www/hosts/%0/docs"
VirtualScriptAliasIP  "/www/hosts/%0/cgi-bin"</pre>


</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="rewrite" id="rewrite">Mass virtual hosts with
mod_rewrite</a> <a title="Permanent link" href="#rewrite" class="permalink">&para;</a></h2>

<p>
Mass virtual hosting may also be accomplished using
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, either using simple <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directives, or using more
complicated techniques such as storing the vhost definitions externally
and accessing them via <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>. These techniques are
discussed in the <a href="../rewrite/vhosts.html">rewrite
documentation</a>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="macro" id="macro">Mass virtual hosts with mod_macro</a> <a title="Permanent link" href="#macro" class="permalink">&para;</a></h2>

<p>Another option for dynamically generated virtual hosts is
<code class="module"><a href="../mod/mod_macro.html">mod_macro</a></code>, with which you can create a virtualhost
template, and invoke it for multiple hostnames. An example of this is
provided in the <strong>Usage</strong> section of the module
documentation.
</p>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/vhosts/mass.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/vhosts/mass.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/vhosts/mass.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else {
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>