Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Httpd Wiki" for change 
notification.

The "TroubleshootingVhosts" page has been changed by SeanTimmins:
http://wiki.apache.org/httpd/TroubleshootingVhosts

New page:
= TroubleShooting Virtual Hosts =
The page will concentrate on Named Base virtual hosts mainly because it is what 
most people use and it is the one most people seem to have problems with. Some 
things are 2.2 only and are marked as such.

== The Basics ==
Virtual Hosts are much simpler than most people seem to think. This is not 
helped by some unusual 'default' virtual hosts setups distributed by some of 
the major distributions.

First of all '''read the documentation'''!
 * http://httpd.apache.org/docs/current/vhosts/
 * http://httpd.apache.org/docs/current/vhosts/examples.html
 * ExampleVhosts

Secondly, and I can't stree this enough, '''USE''' "apachectl -S", "httpd -S" 
or "apache2ctl -S" whenever you make any change to your configuration. It 
outputs various lines of information that are vital to troubleshooting virtual 
host configuration.

== The Requirements ==
 * (2.2 only) You '''must''' have a 
[[http://httpd.apache.org/docs/current/mod/core.html#namevirtualhost|NamedVirtualHost]]
 directive for each IP+port combination you wish to use, it should be IP:port 
or *:port

 {{{
 NameVirtualhost *:80
 }}}

 * Each [[http://httpd.apache.org/docs/current/vhosts/|<VirtualHost>]] 
directive should have and IP:port inside it, in httpd 2.2 this should match 
your 
[[http://httpd.apache.org/docs/current/mod/core.html#namevirtualhost|NamedVirtualHost]]
 directive

 {{{
 <VirtualHost *:80>
 }}}

 * Each virtual host '''must''' have its own unique 
[[http://httpd.apache.org/docs/current/mod/core.html#servername|ServerName]]. 
It is this that must match the host component of the URL that the user types 
into their browser. If you define a second virtual host with the same server 
name then whichever virtual host comes first in the configuration will be the 
only one that works with that name.

 {{{
 ServerName foo.com
 }}}
 * Each virtual host should also have its own distinct 
[[http://httpd.apache.org/docs/current/mod/core.html#documentroot|DocumentRoot]].
 Although it is possible and in a few cases needed to share document roots, it 
is normally better to use a single virtual hosts with server aliases.

 {{{
 DocumentRoot /var/www/foo
 }}}

== The First Virtual Host ==
With named base virtual hosts, the first one apache finds in the configuration 
files is special. This is the one that requests will be passed to if apache has 
no way to determine which specific virtual host to use. It is the '''default''' 
virtual host.

If the user types `http://my.domain.com/my/url/path` then it is the string 
`my.domain.com` that is matched against the host component of the 
[[http://httpd.apache.org/docs/current/mod/core.html#servername|ServerName]] or 
any 
[[http://httpd.apache.org/docs/current/mod/core.html#serveralias|ServerAlias]] 
(Remember Server``Name can contain an optional schema and port)

''Advanced Note:'' It is actually the contents of the `Host` header that is 
used rather than the host component of the URL. Though these would normally be 
the same.

== Virtual Host Example ==
{{{
NameVirtualHost 192.168.0.1:80

# any request to foo.com, or indeen anything other than bar.com that resolves
# to 192.160.0.1 will hit this first virtual host
<VirtualHost 192.168.0.1:80>
  ServerName foo.com
  ServerAlias www.foo.com
  DocumentRoot /var/www/foo
</Virtualhost>

# Only URLs that start http:///bar.com/ or http://www.bar.com will hit this
# virtual host
<VirtualHost 192.168.0.1:80>
  ServerName bar.com
  ServerAlias www.bar.com
  DocumentRoot /var/www/bar
</Virtualhost>
}}}

== Troubleshooting ==
The [[http://httpd.apache.org/docs/current/mod/core.html#errorlog|ErrorLog]] is 
always the first place to look when you get any problems, but there are things 
you can do to make troubleshooting virtual hosts easier.

 * Give each virtual host its own access and error log. this will enable you to 
easily separate out requests to each virtual host and in particular verify a 
particular request is actually hitting the virtual host you think it is. An 
alternative for determining the virtual host a request hits is to add `%v` to 
the 
[[http://httpd.apache.org/docs/current/mod/mod_log_config.html#logformat|LogFormat]]

=== Log Files ===

---------------------------------------------------------------------
To unsubscribe, e-mail: docs-unsubscr...@httpd.apache.org
For additional commands, e-mail: docs-h...@httpd.apache.org

Reply via email to