github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/manual/vhosts/mass.html.en (about)

     1  <?xml version="1.0" encoding="ISO-8859-1"?>
     2  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     3  <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
     4  <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
     5  <!--
     6          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     7                This file is generated from xml source: DO NOT EDIT
     8          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     9        -->
    10  <title>Dynamically configured mass virtual hosting - Apache HTTP Server Version 2.2</title>
    11  <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
    12  <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
    13  <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" />
    14  <script src="../style/scripts/prettify.min.js" type="text/javascript">
    15  </script>
    16  
    17  <link href="../images/favicon.ico" rel="shortcut icon" /><link href="http://httpd.apache.org/docs/current/vhosts/mass.html" rel="canonical" /></head>
    18  <body id="manual-page"><div id="page-header">
    19  <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.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>
    20  <p class="apache">Apache HTTP Server Version 2.2</p>
    21  <img alt="" src="../images/feather.gif" /></div>
    22  <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
    23  <div id="path">
    24  <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.2</a> &gt; <a href="./">Virtual Hosts</a></div><div id="page-content"><div class="retired"><h4>Please note</h4>
    25              <p> This document refers to a legacy release (<strong>2.2</strong>) of Apache httpd. The active release (<strong>2.4</strong>) is documented <a href="http://httpd.apache.org/docs/current">here</a>. If you have not already upgraded, please follow <a href="http://httpd.apache.org/docs/current/upgrading.html">this link</a> for more information.</p>
    26          <p>You may follow <a href="http://httpd.apache.org/docs/current/vhosts/mass.html">this link</a> to go to the current version of this document.</p></div><div id="preamble"><h1>Dynamically configured mass virtual hosting</h1>
    27  <div class="toplang">
    28  <p><span>Available Languages: </span><a href="../en/vhosts/mass.html" title="English">&nbsp;en&nbsp;</a> |
    29  <a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
    30  <a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
    31  </div>
    32  
    33  
    34      <p>This document describes how to efficiently serve an
    35      arbitrary number of virtual hosts with Apache. 
    36      </p>
    37  
    38  </div>
    39  <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#motivation">Motivation</a></li>
    40  <li><img alt="" src="../images/down.gif" /> <a href="#overview">Overview</a></li>
    41  <li><img alt="" src="../images/down.gif" /> <a href="#simple">Simple dynamic virtual hosts</a></li>
    42  <li><img alt="" src="../images/down.gif" /> <a href="#homepages">A virtually hosted homepages system</a></li>
    43  <li><img alt="" src="../images/down.gif" /> <a href="#combinations">Using more than
    44      one virtual hosting system on the same server</a></li>
    45  <li><img alt="" src="../images/down.gif" /> <a href="#ipbased">More efficient IP-based virtual hosting</a></li>
    46  <li><img alt="" src="../images/down.gif" /> <a href="#simple.rewrite">Simple dynamic
    47      virtual hosts using <code>mod_rewrite</code></a></li>
    48  <li><img alt="" src="../images/down.gif" /> <a href="#homepages.rewrite">A
    49      homepages system using <code>mod_rewrite</code></a></li>
    50  <li><img alt="" src="../images/down.gif" /> <a href="#xtra-conf">Using a separate virtual
    51      host configuration file</a></li>
    52  </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
    53  <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
    54  <div class="section">
    55  <h2><a name="motivation" id="motivation">Motivation</a></h2>
    56  
    57      <p>The techniques described here are of interest if your
    58      <code>httpd.conf</code> contains many
    59      <code>&lt;VirtualHost&gt;</code> sections that are
    60      substantially the same, for example:</p>
    61  
    62  <div class="example"><p><code>
    63  NameVirtualHost 111.22.33.44<br />
    64  &lt;VirtualHost 111.22.33.44&gt;<br />
    65  <span class="indent">
    66      ServerName                 www.customer-1.com<br />
    67      DocumentRoot        /www/hosts/www.customer-1.com/docs<br />
    68      ScriptAlias  /cgi-bin/  /www/hosts/www.customer-1.com/cgi-bin<br />
    69  </span>
    70  &lt;/VirtualHost&gt;<br />
    71  &lt;VirtualHost 111.22.33.44&gt;<br />
    72  <span class="indent">
    73      ServerName                 www.customer-2.com<br />
    74      DocumentRoot        /www/hosts/www.customer-2.com/docs<br />
    75      ScriptAlias  /cgi-bin/  /www/hosts/www.customer-2.com/cgi-bin<br />
    76  </span>
    77  &lt;/VirtualHost&gt;<br />
    78  # blah blah blah<br />
    79  &lt;VirtualHost 111.22.33.44&gt;<br />
    80  <span class="indent">
    81      ServerName                 www.customer-N.com<br />
    82      DocumentRoot        /www/hosts/www.customer-N.com/docs<br />
    83      ScriptAlias  /cgi-bin/  /www/hosts/www.customer-N.com/cgi-bin<br />
    84  </span>
    85  &lt;/VirtualHost&gt;
    86  </code></p></div>
    87  
    88      <p>The basic idea is to replace all of the static
    89      <code>&lt;VirtualHost&gt;</code> configuration with a mechanism
    90      that works it out dynamically. This has a number of
    91      advantages:</p>
    92  
    93      <ol>
    94        <li>Your configuration file is smaller so Apache starts
    95        faster and uses less memory.</li>
    96  
    97        <li>Adding virtual hosts is simply a matter of creating the
    98        appropriate directories in the filesystem and entries in the
    99        DNS - you don't need to reconfigure or restart Apache.</li>
   100      </ol>
   101  
   102      <p>The main disadvantage is that you cannot have a different
   103      log file for each virtual host; however if you have very many
   104      virtual hosts then doing this is dubious anyway because it eats
   105      file descriptors. It is better to log to a pipe or a fifo and
   106      arrange for the process at the other end to distribute the logs
   107      to the customers (it can also accumulate statistics, etc.).</p>
   108  
   109  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   110  <div class="section">
   111  <h2><a name="overview" id="overview">Overview</a></h2>
   112  
   113      <p>A virtual host is defined by two pieces of information: its
   114      IP address, and the contents of the <code>Host:</code> header
   115      in the HTTP request. The dynamic mass virtual hosting technique
   116      is based on automatically inserting this information into the
   117      pathname of the file that is used to satisfy the request. This
   118      is done most easily using <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>,
   119      but if you are using a version of Apache up to 1.3.6 then you
   120      must use <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
   121      Both of these modules are disabled by default; you must enable
   122      one of them when configuring and building Apache if you want to
   123      use this technique.</p>
   124  
   125      <p>A couple of things need to be `faked' to make the dynamic
   126      virtual host look like a normal one. The most important is the
   127      server name which is used by Apache to generate
   128      self-referential URLs, etc. It is configured with the
   129      <code>ServerName</code> directive, and it is available to CGIs
   130      via the <code>SERVER_NAME</code> environment variable. The
   131      actual value used at run time is controlled by the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>
   132      setting. With <code>UseCanonicalName Off</code> the server name
   133      comes from the contents of the <code>Host:</code> header in the
   134      request. With <code>UseCanonicalName DNS</code> it comes from a
   135      reverse DNS lookup of the virtual host's IP address. The former
   136      setting is used for name-based dynamic virtual hosting, and the
   137      latter is used for IP-based hosting. If Apache cannot work out
   138      the server name because there is no <code>Host:</code> header
   139      or the DNS lookup fails then the value configured with
   140      <code>ServerName</code> is used instead.</p>
   141  
   142      <p>The other thing to `fake' is the document root (configured
   143      with <code>DocumentRoot</code> and available to CGIs via the
   144      <code>DOCUMENT_ROOT</code> environment variable). In a normal
   145      configuration this setting is used by the core module when
   146      mapping URIs to filenames, but when the server is configured to
   147      do dynamic virtual hosting that job is taken over by another
   148      module (either <code>mod_vhost_alias</code> or
   149      <code>mod_rewrite</code>) which has a different way of doing
   150      the mapping. Neither of these modules is responsible for
   151      setting the <code>DOCUMENT_ROOT</code> environment variable so
   152      if any CGIs or SSI documents make use of it they will get a
   153      misleading value.</p>
   154  
   155  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   156  <div class="section">
   157  <h2><a name="simple" id="simple">Simple dynamic virtual hosts</a></h2>
   158  
   159      <p>This extract from <code>httpd.conf</code> implements the
   160      virtual host arrangement outlined in the <a href="#motivation">Motivation</a> section above, but in a
   161      generic fashion using <code>mod_vhost_alias</code>.</p>
   162  
   163  <div class="example"><p><code>
   164  # get the server name from the Host: header<br />
   165  UseCanonicalName Off<br />
   166  <br />
   167  # this log format can be split per-virtual-host based on the first field<br />
   168  LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
   169  CustomLog logs/access_log vcommon<br />
   170  <br />
   171  # include the server name in the filenames used to satisfy requests<br />
   172  VirtualDocumentRoot /www/hosts/%0/docs<br />
   173  VirtualScriptAlias  /www/hosts/%0/cgi-bin
   174  </code></p></div>
   175  
   176      <p>This configuration can be changed into an IP-based virtual
   177      hosting solution by just turning <code>UseCanonicalName
   178      Off</code> into <code>UseCanonicalName DNS</code>. The server
   179      name that is inserted into the filename is then derived from
   180      the IP address of the virtual host.</p>
   181  
   182  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   183  <div class="section">
   184  <h2><a name="homepages" id="homepages">A virtually hosted homepages system</a></h2>
   185  
   186      <p>This is an adjustment of the above system tailored for an
   187      ISP's homepages server. Using a slightly more complicated
   188      configuration we can select substrings of the server name to
   189      use in the filename so that e.g. the documents for
   190      <code>www.user.isp.com</code> are found in
   191      <code>/home/user/</code>. It uses a single <code>cgi-bin</code>
   192      directory instead of one per virtual host.</p>
   193  
   194  <div class="example"><p><code>
   195  # all the preliminary stuff is the same as above, then<br />
   196  <br />
   197  # include part of the server name in the filenames<br />
   198  VirtualDocumentRoot /www/hosts/%2/docs<br />
   199  <br />
   200  # single cgi-bin directory<br />
   201  ScriptAlias  /cgi-bin/  /www/std-cgi/<br />
   202  </code></p></div>
   203  
   204      <p>There are examples of more complicated
   205      <code>VirtualDocumentRoot</code> settings in the
   206      <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> documentation.</p>
   207  
   208  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   209  <div class="section">
   210  <h2><a name="combinations" id="combinations">Using more than
   211      one virtual hosting system on the same server</a></h2>
   212  
   213      <p>With more complicated setups you can use Apache's normal
   214      <code>&lt;VirtualHost&gt;</code> directives to control the
   215      scope of the various virtual hosting configurations. For
   216      example, you could have one IP address for homepages customers
   217      and another for commercial customers with the following setup.
   218      This can of course be combined with conventional
   219      <code>&lt;VirtualHost&gt;</code> configuration sections.</p>
   220  
   221  <div class="example"><p><code>
   222  UseCanonicalName Off<br />
   223  <br />
   224  LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
   225  <br />
   226  &lt;Directory /www/commercial&gt;<br />
   227  <span class="indent">
   228      Options FollowSymLinks<br />
   229      AllowOverride All<br />
   230  </span>
   231  &lt;/Directory&gt;<br />
   232  <br />
   233  &lt;Directory /www/homepages&gt;<br />
   234  <span class="indent">
   235      Options FollowSymLinks<br />
   236      AllowOverride None<br />
   237  </span>
   238  &lt;/Directory&gt;<br />
   239  <br />
   240  &lt;VirtualHost 111.22.33.44&gt;<br />
   241  <span class="indent">
   242      ServerName www.commercial.isp.com<br />
   243      <br />
   244      CustomLog logs/access_log.commercial vcommon<br />
   245      <br />
   246      VirtualDocumentRoot /www/commercial/%0/docs<br />
   247      VirtualScriptAlias  /www/commercial/%0/cgi-bin<br />
   248  </span>
   249  &lt;/VirtualHost&gt;<br />
   250  <br />
   251  &lt;VirtualHost 111.22.33.45&gt;<br />
   252  <span class="indent">
   253      ServerName www.homepages.isp.com<br />
   254      <br />
   255      CustomLog logs/access_log.homepages vcommon<br />
   256      <br />
   257      VirtualDocumentRoot /www/homepages/%0/docs<br />
   258      ScriptAlias         /cgi-bin/ /www/std-cgi/<br />
   259  </span>
   260  &lt;/VirtualHost&gt;
   261  </code></p></div>
   262  
   263  <div class="note">
   264  	<h3>Note</h3>
   265  	<p>If the first VirtualHost block does <em>not</em> include a
   266  	<code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> directive, the reverse
   267  	DNS of the relevant IP will be used instead. 
   268  	If this is not the server name you
   269  	wish to use, a bogus entry (<code>ServerName
   270  	none.example.com</code>) can be added to get around this
   271  	behaviour.</p>
   272  </div>	
   273  
   274  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   275  <div class="section">
   276  <h2><a name="ipbased" id="ipbased">More efficient IP-based virtual hosting</a></h2>
   277  
   278      <p>After <a href="#simple">the first example</a> I noted that
   279      it is easy to turn it into an IP-based virtual hosting setup.
   280      Unfortunately that configuration is not very efficient because
   281      it requires a DNS lookup for every request. This can be avoided
   282      by laying out the filesystem according to the IP addresses
   283      themselves rather than the corresponding names and changing the
   284      logging similarly. Apache will then usually not need to work
   285      out the server name and so incur a DNS lookup.</p>
   286  
   287  <div class="example"><p><code>
   288  # get the server name from the reverse DNS of the IP address<br />
   289  UseCanonicalName DNS<br />
   290  <br />
   291  # include the IP address in the logs so they may be split<br />
   292  LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
   293  CustomLog logs/access_log vcommon<br />
   294  <br />
   295  # include the IP address in the filenames<br />
   296  VirtualDocumentRootIP /www/hosts/%0/docs<br />
   297  VirtualScriptAliasIP  /www/hosts/%0/cgi-bin<br />
   298  </code></p></div>
   299  
   300  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   301  <div class="section">
   302  <h2><a name="simple.rewrite" id="simple.rewrite">Simple dynamic
   303      virtual hosts using <code>mod_rewrite</code></a></h2>
   304  
   305      <p>This extract from <code>httpd.conf</code> does the same
   306      thing as <a href="#simple">the first example</a>. The first
   307      half is very similar to the corresponding part above but with
   308      some changes for backward compatibility and to make the
   309      <code>mod_rewrite</code> part work properly; the second half
   310      configures <code>mod_rewrite</code> to do the actual work.</p>
   311  
   312      <p>There are a couple of especially tricky bits: By default,
   313      <code>mod_rewrite</code> runs before the other URI translation
   314      modules (<code>mod_alias</code> etc.) so if they are used then
   315      <code>mod_rewrite</code> must be configured to accommodate
   316      them. Also, some magic must be performed to do a
   317      per-dynamic-virtual-host equivalent of
   318      <code>ScriptAlias</code>.</p>
   319  
   320  <div class="example"><p><code>
   321  # get the server name from the Host: header<br />
   322  UseCanonicalName Off<br />
   323  <br />
   324  # splittable logs<br />
   325  LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
   326  CustomLog logs/access_log vcommon<br />
   327  <br />
   328  &lt;Directory /www/hosts&gt;<br />
   329  <span class="indent">
   330      # ExecCGI is needed here because we can't force<br />
   331      # CGI execution in the way that ScriptAlias does<br />
   332      Options FollowSymLinks ExecCGI<br />
   333  </span>
   334  &lt;/Directory&gt;<br />
   335  <br />
   336  # now for the hard bit<br />
   337  <br />
   338  RewriteEngine On<br />
   339  <br />
   340  # a ServerName derived from a Host: header may be any case at all<br />
   341  RewriteMap  lowercase  int:tolower<br />
   342  <br />
   343  ## deal with normal documents first:<br />
   344  # allow Alias /icons/ to work - repeat for other aliases<br />
   345  RewriteCond  %{REQUEST_URI}  !^/icons/<br />
   346  # allow CGIs to work<br />
   347  RewriteCond  %{REQUEST_URI}  !^/cgi-bin/<br />
   348  # do the magic<br />
   349  RewriteRule  ^/(.*)$  /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1<br />
   350  <br />
   351  ## and now deal with CGIs - we have to force a MIME type<br />
   352  RewriteCond  %{REQUEST_URI}  ^/cgi-bin/<br />
   353  RewriteRule  ^/(.*)$  /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1  [T=application/x-httpd-cgi]<br />
   354  <br />
   355  # that's it!
   356  </code></p></div>
   357  
   358  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   359  <div class="section">
   360  <h2><a name="homepages.rewrite" id="homepages.rewrite">A
   361      homepages system using <code>mod_rewrite</code></a></h2>
   362  
   363      <p>This does the same thing as <a href="#homepages">the second
   364      example</a>.</p>
   365  
   366  <div class="example"><p><code>
   367  RewriteEngine on<br />
   368  <br />
   369  RewriteMap   lowercase  int:tolower<br />
   370  <br />
   371  # allow CGIs to work<br />
   372  RewriteCond  %{REQUEST_URI}  !^/cgi-bin/<br />
   373  <br />
   374  # check the hostname is right so that the RewriteRule works<br />
   375  RewriteCond  ${lowercase:%{SERVER_NAME}}  ^www\.[a-z-]+\.isp\.com$<br />
   376  <br />
   377  # concatenate the virtual host name onto the start of the URI<br />
   378  # the [C] means do the next rewrite on the result of this one<br />
   379  RewriteRule  ^(.+)  ${lowercase:%{SERVER_NAME}}$1  [C]<br />
   380  <br />
   381  # now create the real file name<br />
   382  RewriteRule  ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2<br />
   383  <br />
   384  # define the global CGI directory<br />
   385  ScriptAlias  /cgi-bin/  /www/std-cgi/
   386  </code></p></div>
   387  
   388  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
   389  <div class="section">
   390  <h2><a name="xtra-conf" id="xtra-conf">Using a separate virtual
   391      host configuration file</a></h2>
   392  
   393      <p>This arrangement uses more advanced <code>mod_rewrite</code>
   394      features to get the translation from virtual host to document
   395      root from a separate configuration file. This provides more
   396      flexibility but requires more complicated configuration.</p>
   397  
   398      <p>The <code>vhost.map</code> file contains something like
   399      this:</p>
   400  
   401  <div class="example"><p><code>
   402  www.customer-1.com  /www/customers/1<br />
   403  www.customer-2.com  /www/customers/2<br />
   404  # ...<br />
   405  www.customer-N.com  /www/customers/N<br />
   406  </code></p></div>
   407  
   408      <p>The <code>http.conf</code> contains this:</p>
   409  
   410  <div class="example"><p><code>
   411  RewriteEngine on<br />
   412  <br />
   413  RewriteMap   lowercase  int:tolower<br />
   414  <br />
   415  # define the map file<br />
   416  RewriteMap   vhost      txt:/www/conf/vhost.map<br />
   417  <br />
   418  # deal with aliases as above<br />
   419  RewriteCond  %{REQUEST_URI}               !^/icons/<br />
   420  RewriteCond  %{REQUEST_URI}               !^/cgi-bin/<br />
   421  RewriteCond  ${lowercase:%{SERVER_NAME}}  ^(.+)$<br />
   422  # this does the file-based remap<br />
   423  RewriteCond  ${vhost:%1}                  ^(/.*)$<br />
   424  RewriteRule  ^/(.*)$                      %1/docs/$1<br />
   425  <br />
   426  RewriteCond  %{REQUEST_URI}               ^/cgi-bin/<br />
   427  RewriteCond  ${lowercase:%{SERVER_NAME}}  ^(.+)$<br />
   428  RewriteCond  ${vhost:%1}                  ^(/.*)$<br />
   429  RewriteRule  ^/(.*)$                      %1/cgi-bin/$1
   430  </code></p></div>
   431  
   432  </div></div>
   433  <div class="bottomlang">
   434  <p><span>Available Languages: </span><a href="../en/vhosts/mass.html" title="English">&nbsp;en&nbsp;</a> |
   435  <a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
   436  <a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
   437  </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 again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
   438  <script type="text/javascript"><!--//--><![CDATA[//><!--
   439  var comments_shortname = 'httpd';
   440  var comments_identifier = 'http://httpd.apache.org/docs/2.2/vhosts/mass.html';
   441  (function(w, d) {
   442      if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
   443          d.write('<div id="comments_thread"><\/div>');
   444          var s = d.createElement('script');
   445          s.type = 'text/javascript';
   446          s.async = true;
   447          s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
   448          (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
   449      }
   450      else { 
   451          d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
   452      }
   453  })(window, document);
   454  //--><!]]></script></div><div id="footer">
   455  <p class="apache">Copyright 2017 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>
   456  <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.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[//><!--
   457  if (typeof(prettyPrint) !== 'undefined') {
   458      prettyPrint();
   459  }
   460  //--><!]]></script>
   461  </body></html>