Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
This article is available in: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Turkce  Korean  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
by Atif Ghaffar

About the author:

I live and work in Switzerland as a webmaster/unix administrator. My passions include, Linux, unix, Perl, Apache and GPL softwares. More about me can be found on my homepage


Content:

Recycling Ip Addresses with Apache

[Illustration]

Abstract:

This article demonstrates how to serve multiple virtual webservers using the same ip address with Apache on Unix/Linux. The article assumes that the reader has some knowledge of Apache and DNS and unix.
The target audience of this article is ISPs, System Administrator and anyone who cares to read and learn.



 

Why should we recycle IP addresses?

Ip address recycling is useful for number of reasons.

  1. one can easily run out of ip addresses
  2. one might have only one ip address (as in my case)
  3. More system administrators time to add interfaces to host to use multiple ip addresses.
 

How to recycle ip adresses?

Using Apache it is simple to serve multiple domains with a single ip address.
For this article we will assume the ip address to be 192.168.1.1, and hostname hometranet.home.
Simply add a line like this to your httpd.conf file
NameVirtualHost 192.168.1.1:80
Next we will add three virtual servers using the same ip address
#Host for unix files
<VirtualHost 192.168.1.1:80>
	ServerName	unix.hometranet.home
	DocumentRoot	/www/unix/html
	ScriptAlias	/cgi-bin/ /www/unix/cgi-bin/
	TransferLog	/www/unix/logs/access_log
	ErrorLog	/www/unix/logs/error_log
</VirtualHost>

#Host for perl stuff
<VirtualHost 192.168.1.1:80>
	ServerName	perl.hometranet.home
	DocumentRoot	/www/perl/html
	ScriptAlias	/cgi-bin/ /www/perl/cgi-bin/
	TransferLog	/www/perl/logs/access_log
	ErrorLog	/www/perl/logs/error_log
</VirtualHost>


#Here we host some cool Apache stuff
<VirtualHost 192.168.1.1:80>
	ServerName	apache.hometranet.home
	DocumentRoot	/www/apache/html
	ScriptAlias	/cgi-bin/ /www/apache/cgi-bin/
	TransferLog	/www/apache/logs/access_log
	ErrorLog	/www/apache/logs/error_log
</VirtualHost>


So using one ip address we have easily managed 3 different virtualhosts.

Next add CNAMES or A Records for these names in your nameserver's
zone file and dont forget to increment the serial number :)
for eg: in my /var/named/hometranet.home.fwd, I would add
perl.hometranet.home. IN A 192.168.1.1 apache.hometranet.home. IN A 192.168.1.1 unix.hometranet.home. IN A 192.168.1.1
Please note: If you call this host by any other name than the ones given in the virtual config then the first virtual host will respond.
Before Apache 1.3.x the last one would have had responded.
For eg: If this host is named madmag then calling http://madmag.hometranet.home will give you the same result as calling unix.hometranet.home.
 

Using wildcards, dynamic hostnames

This is the cool part. Apache allows wildcards to be used in hostanames.
Meaning you can set a domain *.home.hometranet.home and all queries to user1.home.hometranet.home, user2.home.hometranet.home, user3.home.hometranet.home,etc will be responded.
Example:

#host for users
<VirtualHost 192.168.1.1:80>
	ServerName	home.hometranet.home
	ServerAlias     *.home.hometranet.home
        DocumentRoot	/www/home/html
	TransferLog	/www/home/logs/access_log
	ErrorLog	/www/home/logs/error_log
</VirtualHost>

and an entry in the named zone file.

*.home.hometranet.home.  IN      A       192.168.1.1

Note: This trick will not work if you are using Microsoft DNS Server. Apparently it refuses to accept wildcards in hostnames.
(But you arent using one, are you??)
I once wrote a small system that allows users on the network to add their CV in the database, and using the above trick, their CVs were availabe by http://theirUserName.cv.developer.ch.

 

My virtual hosts configuration file

Here is a bit more exhaustive configuration file that i have separated from my main httpd.conf file
This one is actually on my server.

To include this file in the main httpd.conf you can use the Include directive in your main httpd.conf.
Include "/etc/vhosts.conf"

 

Additional Resources

[Apache name-based Virtual Host Support]
http://www.apache.org/docs/vhosts/name-based.html
[Apache Virtual Host documentation]
http://www.apache.org/docs/vhosts/index.html
[An In-Depth Discussion of Virtual Host Matching]
http://www.apache.org/docs/vhosts/details.html
 

Talkback form for this article

Every article has its own talkback page. On this page you can submit a comment or look at comments from other readers:
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Atif Ghaffar, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus

2001-01-27, generated by lfparser version 2.8