mirror of
https://github.com/apache/httpd.git
synced 2025-08-13 14:40:20 +00:00

corrections coming up. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@80130 13f79535-47bb-0310-9956-ffa450edef68
142 lines
5.3 KiB
Plaintext
142 lines
5.3 KiB
Plaintext
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML><HEAD>
|
|
<TITLE>Apache name-based Virtual Hosts</TITLE>
|
|
</HEAD>
|
|
|
|
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
|
|
<BODY
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#000080"
|
|
ALINK="#FF0000"
|
|
>
|
|
<!--#include virtual="header.html" -->
|
|
<H1 ALIGN="CENTER">Apache name-based Virtual Host Support</H1>
|
|
|
|
<STRONG>See Also:</STRONG>
|
|
<A HREF="ip-based.html">IP-based Virtual Host Support</A>
|
|
|
|
<HR>
|
|
|
|
<H2>Name-based vs. IP-based virtual hosts</H2>
|
|
|
|
<P>While the approach with IP-based virtual hosts works very well,
|
|
it is not the most elegant solution, because a dedicated IP address
|
|
is needed for every virtual host and it is hard to implement on some
|
|
machines. The <CODE>HTTP/1.1</CODE> protocol contains a method for the
|
|
server to identify what name it is being addressed as. Apache 1.1 and
|
|
later support this approach as well as the traditional
|
|
IP-address-per-hostname method.</P>
|
|
|
|
<P>The benefits of using the new name-based virtual host support is a
|
|
practically unlimited number of servers, ease of configuration and use, and
|
|
requires no additional hardware or software.
|
|
The main disadvantage is that the client must support this part of the
|
|
protocol. The latest versions of most browsers do, but there are still
|
|
old browsers in use who do not. This can cause problems, although a possible
|
|
solution is addressed below.</P>
|
|
|
|
<H2>Using non-IP Virtual Hosts</H2>
|
|
|
|
<P>Using the new virtual hosts is quite easy, and superficially looks
|
|
like the old method. You simply add to one of the Apache configuration
|
|
files (most likely <CODE>httpd.conf</CODE> or <CODE>srm.conf</CODE>)
|
|
code similar to the following:</P>
|
|
<PRE>
|
|
NameVirtualHost 111.22.33.44
|
|
|
|
<VirtualHost 111.22.33.44>
|
|
ServerName www.domain.tld
|
|
DocumentRoot /web/domain
|
|
</VirtualHost>
|
|
</PRE>
|
|
|
|
<P>The notable difference between IP-based and name-based virtual host
|
|
configuration is the
|
|
<A HREF="../mod/core.html#namevirtualhost"><CODE>NameVirtualHost</CODE></A>
|
|
directive which specifies an IP address that should be used as a target for
|
|
name-based virtual hosts.
|
|
|
|
<P>Of course, any additional directives can (and should) be placed
|
|
into the <CODE><VirtualHost></CODE> section. To make this work,
|
|
all that is needed is to make sure that the name
|
|
<SAMP>www.domain.tld</SAMP> is an alias (CNAME) pointing to the IP address
|
|
<SAMP>111.22.33.44</SAMP></P>
|
|
|
|
<P>Additionally, many servers may wish to be accessible by more than
|
|
one name. For example, the example server might want to be accessible
|
|
as <CODE>domain.tld</CODE>, or <CODE>www2.domain.tld</CODE>, assuming
|
|
the IP addresses pointed to the same server. In fact, one might want it
|
|
so that all addresses at <CODE>domain.tld</CODE> were picked up by the
|
|
server. This is possible with the
|
|
<A HREF="../mod/core.html#serveralias"><CODE>ServerAlias</CODE></A>
|
|
directive, placed inside the <VirtualHost> section. For
|
|
example:</P>
|
|
|
|
<PRE>
|
|
ServerAlias domain.tld *.domain.tld
|
|
</PRE>
|
|
|
|
<P>Note that you can use <CODE>*</CODE> and <CODE>?</CODE> as wild-card
|
|
characters.</P>
|
|
|
|
<P>You also might need <CODE>ServerAlias</CODE> if you are
|
|
serving local users who do not always include the domain name.
|
|
For example, if local users are
|
|
familiar with typing "www" or "www.foobar" then you will need to add
|
|
<CODE>ServerAlias www www.foobar</CODE>. It isn't possible for the
|
|
server to know what domain the client uses for their name resolution
|
|
because the client doesn't provide that information in the request.</P>
|
|
|
|
<H2>Compatibility with Older Browsers</H2>
|
|
|
|
<P>As mentioned earlier, there are still some clients in use who
|
|
do not send the required data for the name-based virtual hosts to work
|
|
properly. These clients will always be sent the pages from the
|
|
<CITE>primary</CITE> name-based virtual host (the first virtual host
|
|
appearing in the configuration file for a specific IP address).</P>
|
|
|
|
<P>There is a possible workaround with the
|
|
<A HREF="../mod/core.html#serverpath"><CODE>ServerPath</CODE></A>
|
|
directive, albeit a slightly cumbersome one:</P>
|
|
|
|
<P>Example configuration:
|
|
|
|
<PRE>
|
|
NameVirtualHost 111.22.33.44
|
|
|
|
<VirtualHost 111.22.33.44>
|
|
ServerName www.domain.tld
|
|
ServerPath /domain
|
|
DocumentRoot /web/domain
|
|
</VirtualHost>
|
|
</PRE>
|
|
|
|
<P>What does this mean? It means that a request for any URI beginning
|
|
with "<SAMP>/domain</SAMP>" will be served from the virtual host
|
|
<SAMP>www.domain.tld</SAMP> This means that the pages can be accessed as
|
|
<CODE>http://www.domain.tld/domain/</CODE> for all clients, although
|
|
clients sending a <SAMP>Host:</SAMP> header can also access it as
|
|
<CODE>http://www.domain.tld/</CODE>.</P>
|
|
|
|
<P>In order to make this work, put a link on your primary virtual host's page
|
|
to <SAMP>http://www.domain.tld/domain/</SAMP>
|
|
Then, in the virtual host's pages, be sure to use either purely
|
|
relative links (e.g. "<SAMP>file.html</SAMP>" or
|
|
"<SAMP>../icons/image.gif</SAMP>" or links containing the prefacing
|
|
<SAMP>/domain/</SAMP>
|
|
(e.g. "<SAMP>http://www.domain.tld/domain/misc/file.html</SAMP>" or
|
|
"<SAMP>/domain/misc/file.html</SAMP>").</P>
|
|
|
|
<P>This requires a bit of
|
|
discipline, but adherence to these guidelines will, for the most part,
|
|
ensure that your pages will work with all browsers, new and old.</P>
|
|
|
|
<P>See also: <A HREF="examples.html#serverpath">ServerPath configuration
|
|
example</A></P>
|
|
|
|
<!--#include virtual="footer.html" -->
|
|
</BODY>
|
|
</HTML>
|