[ 7 October 1997
  The Linux Virtual Web mini-HOWTO is not being maintained by 
  the author any more.  This topic will be covered in the new
  version of the Linux WWW HOWTO. ]

VirtualWeb-Mini-HOWTO

Dan Pancamo, pancamo@infocom.net http://www.infocom.net/~pancamo/

v1.0, 24 November 1995  Copyright 1995

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

Table of Contents

1.0 What is a Virtual Web Site?
2.0 What software patched do I need?
    2.1 Linux versions 1.2.X requires the IPalias patch alias-patch-1.2.1-v1
    2.2 Both NCSA 1.5 and Apache support Virtual hosting.
3.0 How Do I set it up?
    3.1 Creating the new account
    3.2 Setting up the NCSA 1.5 and Apache config files
    3.3 Configuring the interface
    3.4 Registering with Internic
    3.5 Configuring Named
        3.5.1 Example /etc/named.boot (replace x with your IP)
        3.5.2 Example /etc/named.data/db.domain1.com
        3.5.3 Example /etc/named.data/db.xxx.xxx.xxx
        3.5.4 restart named;  i.e. named.restart
    3.6 Virtual Mail
        3.6.1 Sendmail configuration
        3.6.1.1. Create /etc/domainalias
        3.6.1.2 Create the maped DB file
        3.6.1.3.1. Add a Cw record for each host
        3.6.1.3.2. Add the domainalias mapping
        3.6.1.3.3. Add/Change Ruleset 98
    3.7 Virtual FTP

4.0  Links to more Virtual Web Information

1.0 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.

2.0 What software patched do I need?

    2.1 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.

    2.2 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/

3.0 How Do I set it up?

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

    3.2 Setup the 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


    3.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

    3.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


    3.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.

        3.5.1 Example /etc/named.boot (replace x with your IP)

              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

       3.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.

       3.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.

       3.5.4 restart named;  i.e. named.restart

    3.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.

        3.6.1 Sendmail configuration

          Retrieve the current version of sendmail that contains makemap btree support

          3.6.1.1. 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.6.1.2 Create the maped DB file

                > makemap btree /etc/domainalias.db  < /etc/domainalias

          3.6.1.3. /etc/sendmail.cf changes:

            3.6.1.3.1. Add a Cw record for each new virtual host

                Cwdomain1.com
                Cwdomain2.com

            3.6.1.3.2. Add the domainalias mapping only once

                 Kdomainalias btree /etc/domainalias.db

            3.6.1.3.3. 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


          3.5.1.4  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.


    3.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

    4.0  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

