Virtual Web mini-HOWTO

Dan Pancamo

Parag Mehta

pm@gnuos.org

David Merrill - Conversion from text to DocBook SGML.
Revision History                                                             
Revision 1.1                            2001-06-03                           
New maintainer, converted to DocBook (SGML), Licensed under GFDL.            
Revision 1.0                            1995-11-24                           
Initial Release.                                                             


This HOWTO discuss the essentials of setting up a Virtual Web Site under
Linux.

-----------------------------------------------------------------------------
Table of Contents
1. License
2. What is a Virtual Web Site?
3. What Software and Software Patches Do I Need?
    3.1. Linux Kernel
    3.2. HTTP Servers
   
   
4. How Do I set it up?
    4.1. Create the New Account
    4.2. NCSA 1.5 or Apache Config Files
    4.3. Configuring the interface
    4.4. Registering with Internic
    4.5. Configuring Named
        4.5.1. Example /etc/named.boot
        4.5.2. Example /etc/named.data/db.domain1.com
        4.5.3. Example /etc/named.data/db.xxx.xxx.xxx
        4.5.4. Restart named
       
       
    4.6. Virtual Mail
        4.6.1. Sendmail Configuration
       
       
    4.7. Virtual FTP
   
   
5. Links to More Virtual Web Information

1. License

This document is made available under the GNU Free Documentation License.
-----------------------------------------------------------------------------

2. What is a Virtual Web Site?

A World Wide Web (WWW) Server is normally a single machine dedicated to
processing HTTP requests for a single WWW site. Simply put, one WWW site per
machine. Since the computing resources for processing httpd requests is low
for most WWW sites, the majority of the computing resources are left unused.
A virtual WWW site simple allows more than one WWW site to share a single
processor. Instead of having www.domain1.com and www.domain2.com requiring
two physical computing devices, www.domain1.com and www.domain2.com can be
located on a single computing device and share common resources.

Normally small computing facilities, and small businesses do not have the
resources to maintain a dedicated web server and a dedicated Internet
connection. These cost can easily start off at $10K for setup, and $500-2500
monthly to maintain. Small computing facilities, and small businesses are now
able to "rent" WWW space from a Virtual WWW providers. The customer can then
maintain the WWW "pages" using a local telnet and/or FTP connection.

WWW providers such as InfoCom Networks http://www.infocom.net/ provide WWW
space as low as $75 per month. A few Virtual Sites might clear up the
mystery. So the cost of setting up a WWW site is significantly lower than
that of setting up a dedicated server and connection. The Virtual Site has a
major advantage over other WWW addressing schemes such as
"www.yourprovider.com/~businessname". The Virtual WWW server inherently
contains the ability to move to a new location or setup a dedicated WWW
server without changing addresses. Changing WWW URL's can result in a major
loss of traffic to your site, and lots of business literature updates.

With most web sites, www.domain1.com and www.domain2.com both resolve to
separate IP's. In order to accept multiple request from a single host, the
virtual host must be able to answer request for both sites. The method used
to solve this problem is called IP aliasing. IP aliasing allows a single host
to accept request for multiple IP's. The virtual Web server must have the
ability to alias IP's

IP aliasing is just one part of the virtual solution. The Domain Name System
(DNS) also must be configured to resolve both www.domain1.com and
www.domain2.com. If domain1.com and domain2.com are new domains, then both
must be registered with Internic. Currently, Internic is charging $50 a year
to maintain your domain.

Most virtual WWW sites should also provide virtual mail, or the ability to
forward all mail to the virtual domain to another user or users.

Virtual FTP or the ability to FTP using the standard host name
"ftp.domain1.com" should also be configured by the WWW provider.
-----------------------------------------------------------------------------

3. What Software and Software Patches Do I Need?

3.1. Linux Kernel

Linux versions 1.2.X requires the IPalias patch alias-patch-1.2.1-v1 and
alias-net-tools.tar. I'm not sure if 1.3.X supports this patch yet. For more
information on the IPalias patch see ftp://ftp.mindspring.com/users/rsanders/
ipalias/

Using multiple dummy interfaces has been suggested in place of the IPalias
solution. While the dummy solution may work, it does not appear to be as
clean as the IPalias solution. For more information on using Apache and the
dummy solution see Aram Mirzadeh's virtual hosting information at http://
www.qosina.com/apache/virtual.html

All that is required to add a new alias using the IPalias method is: > /sbin/
ifconfig eth0 alias www.domainX.com

Also, the IPalias solution is supported on several other platforms.
-----------------------------------------------------------------------------

3.2. HTTP Servers

NCSA 1.5, Apache, and Spinner support Virtual hosting. http://
hoohoo.ncsa.uiuc.edu/docs/Overview.html http://www.apache.org/ http://
spinner.infovav.se/
-----------------------------------------------------------------------------

4. How Do I set it up?

4.1. Create the New Account

Create a regular Linux account for the virtual customer with home directory
and mail.
-----------------------------------------------------------------------------

4.2. NCSA 1.5 or Apache Config Files

Virtual Host implementations are still changing. A few patches exist to
support Virtual Host Check the server's release notes for more details. NCSA
1.5 or Apache now include the Virtual patches, and I have been told that
Spinner supports virtual hosts.

One virtual patch supports the following srm.conf syntax, however the second
NCSA 1.5 method of defining a Virtual host allows for greater flexibility

SubDocumentRoot www.domain1.com /usr/local/etc/httpd/docs/domain1            
SubDocumentRoot www.domain2.com /usr/local/etc/httpd/docs/domain2            

NCSA and Apache support the following httpd.conf syntax:

ServerAdmin webmaster@domain1.com                                            
DocumentRoot /usr/local/etc/httpda/docs/domain1                              
ServerName www.domain1.com                                                   
ErrorLog logs/errors.domain1.com                                             
TransferLog logs/access_log.domain1.com                                      
-----------------------------------------------------------------------------

4.3. Configuring the interface

Once the IPalias patches have been installed add the following to your /etc/
rc.d/rc.local on your local web server.

/sbin/ifconfig eth0 alias www.domain1.com                                    
/sbin/ifconfig eth0 alias www.domain2.com                                    
/sbin/ifconfig eth0 alias www.domainN.com                                    
-----------------------------------------------------------------------------

4.4. Registering with Internic

If you are setting up a new domain or change a current domain, you must
register the domain with Internic. The template can be found at ftp://
rs.internic.net/templates/domain-template.txt
-----------------------------------------------------------------------------

4.5. Configuring Named

Named will need to be configured so that your virtual domain will be visible
to the outside world. I don't claim to be an expert on DNS. Suggestions
always welcome.
-----------------------------------------------------------------------------

4.5.1. Example /etc/named.boot

directory /etc/named.data                                                    
primary           realdomain.com                  db.realdomain.com          
primary           xxx.xxx.xxx.IN-ADDR.ARPA        db.xxx.xxx.xxx             
primary           0.0.127.IN-ADDR.ARPA            db.local                   
                                                                             
primary           domain1.com                     db.domain1.com             
primary           domain2.com                     db.domain2.com             
cache             .                               named.root                 

Note Replace x with your IP.                                                 
-----------------------------------------------------------------------------

4.5.2. Example /etc/named.data/db.domain1.com

$ORIGIN com.                                                                 
  domain1    IN      SOA     domain1.com. hostmaster.domain1.com. (          
             10134 43200 3600 604800 86400 )                                 
             IN      NS      ns1.realdomain.com.                             
             IN      MX      10 mail.realdomain.com.                         
             IN      MX      0 domain1.com.                                  
domain1.com. IN      A       xxx.xxx.xxx.xxx    ;www.domain1.com IP          
                                                                             
  $ORIGIN domain1.com.                                                       
  ftp        IN      CNAME   domain1.com.                                    
  www        IN      CNAME   domain1.com.                                    
  mail       IN      CNAME   domain1.com.                                    
-----------------------------------------------------------------------------

4.5.3. Example /etc/named.data/db.xxx.xxx.xxx

You should already have a db.xxx.xxx.xxx for your current site update it to
contain the new virtual domains for reverse lookups

xx              IN      PTR     www.domain1.com.                             
xx              IN      PTR     www.domain2.com.                             
-----------------------------------------------------------------------------

4.5.4. Restart named

Once you've finished editing config files, you will need to restart the named
daemon.
-----------------------------------------------------------------------------

4.6. Virtual Mail

Your virtual customers will more than likely want the ability to have mail
that is sent to their domain forwarded to another domain. A few sendmail.cf
changes will do the trick. After several months of trying different sendmail
changes, this is the 1st method that I found that works and requires only one
sendmail.cf change for each new virtual site.
-----------------------------------------------------------------------------

4.6.1. Sendmail Configuration

 1. Retrieve the current version of sendmail that contains makemap btree
    support.
   
 2. Create a file called /etc/domainalias with the following mappings:
   
    *@domain1.com           localnet@realdomain.com                  
    *@domain2.com           townplaz@realdomain.com                  
    *@domainN.com           soracomp@realdomain.net                  
                                                                     
    webmaster@domain1.com   somuser@anotherhost.com                  
    jamison@domain2.com     anotheruser@somehost.com                 
   
 3. Create the maped DB file
   
    +---------------------------------------------------------------+
    |makemap btree /etc/domainalias.db  < /etc/domainalias          |
    +---------------------------------------------------------------+
   
 4. /etc/sendmail.cf changes:
   
     a. Add a Cw record for each new virtual host
       
        Cwdomain1.com                                                 
        Cwdomain2.com                                                 
       
     b. Add the domainalias mapping only once.
       
        Kdomainalias btree /etc/domainalias.db                        
       
     c. Add/Change Ruleset 98
       
        ###################################################################           
        ###  Ruleset 98 -- local part of ruleset zero (can be null)     ###           
        ###################################################################           
                                                                                      
        S98                                                                           
                                                                                      
        R$+ < $+ . >          $1 < $2 >                         remove trailing dots  
        R$+ < $+ >            $: < > $(domainalias $1$2 $)      match user@address    
        R< > $+ @ $*          $: < $1 > $(domainalias * @ $2 $) match *@address       
        R< $+ > * $*          $: < > $1 $2                      replace * with userid 
        R < $+ > $+           $: < > $2                         bugfix                
        R< > $*               $: $>3 $1                         and rewrite using S3  
       
   
 5. Sendmail Testing
   
    Test the sendmail configuration to verify the new sendmail.cf changes
   
    sendmail -v -bv info@domain1.com                                 
   
    The final destination should be displayed.
   

-----------------------------------------------------------------------------
4.7. Virtual FTP

Currently, I have not been able to get Virtual FTP to work. A few patches
exist, and I'm sure a working patch exist. We just create a working directory
/home/ftp/business/domain1, but a true Virtual FTP would be nice.

If anyone would like to contribute a solution, I would be more than happy to
add it here.

Arnt Gulbrandsen has rewritten ftpd and has included support for independent
FTP services The Troll Tech FTP Daemon
-----------------------------------------------------------------------------

5. Links to More Virtual Web Information

http://hoohoo.ncsa.uiuc.edu/docs/Overview.html

http://www.apache.org/

http://www.qosina.com/apache/virtual.html

http://spinner.infovav.se/

ftp://ftp.mindspring.com/users/rsanders/ipalias/

http://www.thesphere.com/~dlp/TwoServers/

http://hoohoo.ncsa.uiuc.edu/docs/setup/httpd/VirtualHost.html

ftp://ftp.dhp.com:/pub/linux/virtual-hosting
