Virtual Hosting is cool. It basically allows you to host multiple domain names on a single computer and have each one act different when accessed over http. Apache makes it really, really easy.

First, you're going to need to point all of the domains and subdomains you want hosted at your host box's IP. I'll leave you to figure that much out by yourself. (If you figure out named or whatever it's called, be sure how to write a node on it, because i'm curious..)

Assuming that at this point you have a working *n?x system with a working apache web server and all the important domains pointing at it, you need to locate apache's conf file. This will be named either httpd.conf or apache.conf, and can be found.. well, practically anywhere. use locate.

Open this file, go to the end of it. You'll probably see some stuff about virtualhost in comments. You can probably figure out the rest from here, but i'll hold your hand a minute more. Stick (or uncomment, for that matter) the following couple lines at the end.

NameVirtualHost YOUR_IP_ADRESS

<VirtualHost YOUR_IP_ADRESS>

You need these four lines, but everything else is just kind of freeform. The <VirtualHost> areas are basically just blocks of apache server directives that are only executed under certain conditions. The first VirtualHost acts as the default; if someone accesses you as a domain name you haven't set up a special VirtualHost for, or accesses you by your ip adress, Apache will just go by the terms of first VirtualHost listed (which in this case is a blank one, meaning Apache won't do anything special and will just act the way it did before you set up all this Virtual Hosting stuff..)

Now all that there is left to do is set up <VirtualHost> areas for each of the domains you're going to be using. A sample should already be in your conf file commented out, but here it is anyway:

<VirtualHost YOUR_IP_ADRESS>

DocumentRoot /www/docs/

ErrorLog logs/
CustomLog logs/ common

And all you have to do is put in one of these for each possible domain name you could be addressed by (with the name in each one after ServerName) take this, give the appropriate places for logs and such, and then just specify a different folder for each DocumentRoot. If you're really bored, you could just give each user on your box a subdomain and have that subdomain's DocumentRoot be the user's ~/html. (This would have the nifty side-effect you could let all your users have their own private little log files.)

You can put any directive you want in between those brackets; one interesting example, which you should put in place of DocumentRoot if you use it, is Redirect. Say Redirect / http://this_other_internet_site/dir/ and if anyone tries to access something on their website, they will magically automatically be redirected to that file path on http://this_other_internet_site/dir/. (If you only want part of your site to act this way, / can be a pathname.)

You can also, by the way, use wildcards in the ServerName directive above *.domain.tld, for example, would match all of domain.tld's subdomains.