Article: Using Host Headers to host multiple websites on IIS 6.0

ID: 187
Created: 2006-01-18
Updated: 2006-01-18


Introduction

IIS 6.0 is capable of hosting multiple websites on one server. This is done by separating the websites with unique combinations of host header name, IP number and port. This article will explain the different ways of hosting multiple websites using IIS, and will guide you thru setting IIS 6.0 up to host multiple websites using the host header approach.

How IIS can host multiple websites

To distinguish between websites, IIS looks at three attributes:

For each website, the combination of these three attributes must be unique. This means that you can have two websites using two different IP numbers, two different ports, or two different host headers (and of course also any combination of the three). Whatever combination you select, it is stored in the metabase property called ServerBindings[1] in the string format IP:Port:Hostname, for example 192.168.0.1:80:www.gafvert.info. Luckily enough, you do not need to understand anything of the metabase nor the ServerBindings property to follow this article.

The host header name and IP number can be omitted and in that case the website accepts all host header names and/or (depending on if both attributes were omitted) IP numbers. This can of course only be done for one website (otherwise IIS would be confused and would not know which website should handle the request).

What is a host header?

A host header is a string part of the request sent to the web server (it is in the HTTP header). This means that configuring IIS to use host headers is only one step in the approach to host multiple websites using host headers to distinguish between the websites. A configuration of the DNS server (usually means that you need to add an (A) record for the domain) is also required, so the client can find the web server.

Setting up IIS for multiple websites

Now when we have some background and understand how IIS works in relation to hosting multiple websites, and that the DNS server (also known as name server) must be updated to include the new domain, we can start with the configuration of IIS.

Configuring IIS for this is actually not difficult at all. I will use a default installation of Windows Server 2003 Standard Edition, and a default installation of IIS (also see Install and configure IIS 6.0 to serve ASP, ASP.NET and static pages).

Web Site Creation Wizard - Set Description
Web Site Creation Wizard - Set Host Header
Web Site Creation Wizard - Set Home Directory
Web Site Creation Wizard - Set Access Permissions

You have now successfully configured IIS to host two websites, using a host header to distinguish the second website.

The next step is to add an (A) record for beta.gafvert.info (the example) in the DNS server. How to do this depends on the DNS server, and what user interface you have to configure the DNS server, so a step-by-step guide for this has been excluded. This step must however be done, or else your visitors will not be able to find the web server.

A DNS Server is not necessary. The hosts file can also be used, but that means the hosts file must be edited on each client. A CNAME can also be used instead of an (A) record. What is important however is that the client machine must find the web server by using the name you have chosen as host header name, and how the client does this is not related to IIS.

Troubleshooting

The most critical part of this is actually outside of IIS – it is the name resolution. So most problems when setting up multiple websites is that the client is unable to find the server. If this is true can easily be checked:

The IP address returned by nslookup should match the IP address of the web server. If it does not, the problem is related to name resolution and cannot be fixed by an IIS configuration. That is, the DNS server, hosts file, or whatever you use so that the clients find the web server is incorrect configured.

Another common problem reveals itself during the Web Site Creation Wizard; you are unable to create the website with the combination of host header, IP and port you want to. This means that the combination you try to use is not unique, and you will have to check the websites already configured on the server.

A third common problem is that although you use the domain name you have specified to reach the website, you are taken to the "default website" (or any other website that has been configured without host header and listens on the same port number and IP number). This has two possible explanations – the website is not properly configured, or IIS does not receive the host header. The latter sounds very uncommon, but is actually quite common. First of all, the Host header is part of the HTTP 1.1 specification, so if the client is using HTTP 1.0, this is expected (all new clients use HTTP 1.1). Second, if the DNS service you use is not true DNS but instead some kind of forwarding service, it happens that the host header is vanished somewhere. So the tip is that if you experience this, verify that IIS actually gets the host header you expect it to get. This problem is rarely related to IIS (since there is not much that can go wrong in the configuration of IIS).

A "400 – Bad Request (Invalid Hostname)" is returned if the above problem is true, but there is no "default website" that accepts all requests on that IP number and port.

Link(s)

[1] ServerBindings Metabase Property (IIS 6.0)
Host Headers versus multiple IPs when hosting several websites
Multiple websites on Windows XP Professional
Configuring SSL Host Headers (IIS 6.0)
Host Header field in RFC 2626 ("Hypertext Transfer Protocol -- HTTP/1.1") section 14.23

Home | Notes Home | IIS Home | Copyright © 2002 - 2006 Kristofer Gäfvert