<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://panoptic.com/mediawiki/aolserver/index.php?action=history&amp;feed=atom&amp;title=Virtual_Hosting</id>
	<title>Virtual Hosting - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://panoptic.com/mediawiki/aolserver/index.php?action=history&amp;feed=atom&amp;title=Virtual_Hosting"/>
	<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Virtual_Hosting&amp;action=history"/>
	<updated>2026-04-25T16:20:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://panoptic.com/mediawiki/aolserver/index.php?title=Virtual_Hosting&amp;diff=2893&amp;oldid=prev</id>
		<title>WikiSysop: imported from WiKit id 98</title>
		<link rel="alternate" type="text/html" href="https://panoptic.com/mediawiki/aolserver/index.php?title=Virtual_Hosting&amp;diff=2893&amp;oldid=prev"/>
		<updated>2005-07-21T21:02:29Z</updated>

		<summary type="html">&lt;p&gt;imported from WiKit id 98&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Virtual hosting is built in to '''AOLserver 4'''. (See below for version 3.x recipes)&lt;br /&gt;
&lt;br /&gt;
Say you want to run 2 sites from one IP address. You'll need 3 config files - frontend.tcl, backend1.tcl and backend2.tcl. The frontend will run on port 80 and proxy requests to the backend servers depending on the hostname in the Header. You'll actually only run 1 AOLserver process. When you start nsd, you'll feed it frontend.tcl. The first thing frontend.tcl does is to read backend1.tcl and backend2.tcl. It sets up those virtual servers and then sets some global parameters. &lt;br /&gt;
&lt;br /&gt;
Here's how I set up my directory structure:&lt;br /&gt;
&lt;br /&gt;
 /home/vinod/web/&lt;br /&gt;
                 backend1/&lt;br /&gt;
                          backend1.tcl&lt;br /&gt;
                          log/&lt;br /&gt;
                          www/&lt;br /&gt;
                              index.adp&lt;br /&gt;
                 backend2/&lt;br /&gt;
                          backend2.tcl&lt;br /&gt;
                          log/&lt;br /&gt;
                          www/&lt;br /&gt;
                              index.adp&lt;br /&gt;
                 frontend/&lt;br /&gt;
                          frontend.tcl&lt;br /&gt;
                          log/&lt;br /&gt;
&lt;br /&gt;
And here are the files:&lt;br /&gt;
                 &lt;br /&gt;
'''frontend.tcl'''&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;Starting to read frontend config file...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    source /home/vinod/web/backend1/backend1.tcl&lt;br /&gt;
    source /home/vinod/web/backend2/backend2.tcl&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;Done loading backend server configs...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Load nssock globally&lt;br /&gt;
    ns_section ns/modules&lt;br /&gt;
    ns_param   nssock          /usr/local/aolserver/bin/nssock.so&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/module/nssock&lt;br /&gt;
    ns_param   port            80&lt;br /&gt;
    ns_param   hostname        myhostname.example.com&lt;br /&gt;
    ns_param   address         0.0.0.0&lt;br /&gt;
    ns_param   defaultserver   backend1&lt;br /&gt;
&lt;br /&gt;
    # Map headers to server-name&lt;br /&gt;
    ns_section ns/module/nssock/servers&lt;br /&gt;
    ns_param   backend1        backend1.com&lt;br /&gt;
    ns_param   backend1        backend1.com:80&lt;br /&gt;
    ns_param   backend2        backend2.com&lt;br /&gt;
    ns_param   backend2        backend2.com:80&lt;br /&gt;
    ns_param   backend2        myotherdomain.com&lt;br /&gt;
    ns_param   backend2        myotherdomain.com:80&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/servers&lt;br /&gt;
    ns_param   backend1        &amp;quot;My First Example Site&amp;quot;&lt;br /&gt;
    ns_param   backend2        &amp;quot;My Second Example Site&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Global server parameters&lt;br /&gt;
    ns_section ns/parameters&lt;br /&gt;
    ns_param   serverlog        /home/vinod/web/frontend/log/error.log&lt;br /&gt;
    ns_param   home             /usr/local/aolserver&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/threads&lt;br /&gt;
    ns_param   stacksize        [[expr 128*1024]] ;# Per-thread stack size.&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/mimetypes&lt;br /&gt;
    ns_param   default          &amp;quot;*/*&amp;quot;     ;# MIME type for unknown extension.&lt;br /&gt;
    ns_param   noextension      &amp;quot;*/*&amp;quot;     ;# MIME type for missing extension.&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;nsd.tcl: finished reading frontend config file.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''backend1.tcl''' and '''backend2.tcl''' (The only difference is the first line)&lt;br /&gt;
    set server                  &amp;quot;backend1&amp;quot; ;# or &amp;quot;backend2&amp;quot; for backend2.tcl&lt;br /&gt;
    ns_log notice &amp;quot;Starting to read $server config file...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    set db_name                 $server&lt;br /&gt;
    set serverroot              &amp;quot;/home/vinod/web/${server}&amp;quot;&lt;br /&gt;
    set bindir                  [[file dirname [ns_info nsd]]]&lt;br /&gt;
    set pageroot                ${serverroot}/www&lt;br /&gt;
&lt;br /&gt;
    # Tcl Configuration&lt;br /&gt;
    ns_section ns/server/${server}/tcl&lt;br /&gt;
    ns_param   library          ${serverroot}/tcl&lt;br /&gt;
&lt;br /&gt;
    # Server parameters&lt;br /&gt;
    ns_section ns/server/${server}&lt;br /&gt;
    ns_param   directoryfile      index.tcl,index.adp,index.html,index.htm&lt;br /&gt;
    ns_param   pageroot           $pageroot&lt;br /&gt;
&lt;br /&gt;
    # ADP (AOLserver Dynamic Page) configuration&lt;br /&gt;
    ns_section ns/server/${server}/adp&lt;br /&gt;
    ns_param   map           /*.adp    ;# Extensions to parse as ADP's&lt;br /&gt;
    ns_param   defaultparser fancy&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/server/${server}/adp/parsers&lt;br /&gt;
    ns_param   fancy    &amp;quot;.adp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Database drivers&lt;br /&gt;
    ns_section &amp;quot;ns/db/drivers&amp;quot;&lt;br /&gt;
    ns_param   postgres        ${bindir}/nspostgres.so&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/db/pools&lt;br /&gt;
    ns_param   ${server}pool1      &amp;quot;$server Pool 1&amp;quot;&lt;br /&gt;
    ns_param   ${server}pool2      &amp;quot;$server Pool 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/db/pool/${server}pool1&lt;br /&gt;
    ns_param   driver             postgres&lt;br /&gt;
    ns_param   datasource         localhost::${db_name}&lt;br /&gt;
    ns_param   user               vinod&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/db/pool/${server}pool2&lt;br /&gt;
    ns_param   driver             postgres&lt;br /&gt;
    ns_param   datasource         localhost::${db_name}&lt;br /&gt;
    ns_param   user               vinod&lt;br /&gt;
&lt;br /&gt;
    ns_section ns/server/${server}/db&lt;br /&gt;
    ns_param   pools              &amp;quot;${server}pool1,${server}pool2&amp;quot;&lt;br /&gt;
    ns_param   defaultpool        ${server}pool1&lt;br /&gt;
&lt;br /&gt;
    # Access log -- nslog&lt;br /&gt;
    ns_section ns/server/${server}/module/nslog&lt;br /&gt;
    ns_param   file                 ${serverroot}/log/access.log&lt;br /&gt;
&lt;br /&gt;
    # Modules to load&lt;br /&gt;
    ns_section ns/server/${server}/modules&lt;br /&gt;
    ns_param   nsdb            ${bindir}/nsdb.so&lt;br /&gt;
    ns_param   nslog           ${bindir}/nslog.so&lt;br /&gt;
&lt;br /&gt;
    ns_log notice &amp;quot;Finished reading $server config file.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This sets up 2 pretty plain virtual hosts. Once you get this setup working, you can configure backend1.tcl and backend2.tcl to your heart's desire.&lt;br /&gt;
&lt;br /&gt;
Note that you can map multiple Headers to 1 server. It's also important to note that the server's error log is specified in ns/parameters, so you can't specifiy a separate error.log for each backend server. &lt;br /&gt;
&lt;br /&gt;
Start your server:&lt;br /&gt;
&lt;br /&gt;
    root:/home/vinod/web/frontend# /usr/local/aolserver/bin/nsd -t frontend.tcl -b 0.0.0.0:80 -u nobody -g web&lt;br /&gt;
&lt;br /&gt;
Hope this helps - [[Vinod Kurup]] 2005-07-21&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''AOLserver 3.x'''&lt;br /&gt;
&lt;br /&gt;
The following three patches are required to get [[nsvhr]]/[[nssock]] and nsvhr/[[nsunix]] working under AOLserver 3.5.x:&lt;br /&gt;
* http://panoptic.com/aolserver/dossy-aolserver3_5_x-patch (1313 bytes)&lt;br /&gt;
* http://panoptic.com/aolserver/dossy-nsunix-patch (21909 bytes)&lt;br /&gt;
* http://panoptic.com/aolserver/dossy-nsvhr-patch (1945 bytes)&lt;br /&gt;
&lt;br /&gt;
'''NOTE:  As of 2002-11-23, the changes to the core are''' ''no longer necessary'' '''and the changes to nsunix and nsvhr have been committed to CVS.  Look for tag nsunix3_5 and nsvhr3_5.'''&lt;br /&gt;
&lt;br /&gt;
In the nsvhr server's nsd.tcl:&lt;br /&gt;
&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/modules&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    ns_param nssock       nssock.so&lt;br /&gt;
    ns_param nsvhr        nsvhr.so&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    # Virtual Hosting redirector -- nsvhr&lt;br /&gt;
    #&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/nsvhr&amp;quot;&lt;br /&gt;
    ns_param   Method          &amp;quot;GET&amp;quot;      ;# Methods allowed to proxy&lt;br /&gt;
    ns_param   Method          &amp;quot;POST&amp;quot;     ;# Methods allowed to proxy (can have &amp;gt;1)&lt;br /&gt;
    ns_param   Method          &amp;quot;HEAD&amp;quot;     ;# Methods allowed to proxy (can have &amp;gt;1)&lt;br /&gt;
    ns_param   Timeout         60         ;# Timeout waiting for back-end&lt;br /&gt;
&lt;br /&gt;
    # Register hosts to proxy&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/nsvhr/maps&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    ns_param   &amp;quot;www.domain.com&amp;quot;        &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
    ns_param   &amp;quot;www.domain.com:80&amp;quot;     &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
    ns_param   &amp;quot;domain.com&amp;quot;            &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
    ns_param   &amp;quot;domain.com:80&amp;quot;         &amp;quot;unix://domain.com.nsunix&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the nssock or nsunix virtual host's nsd.tcl:&lt;br /&gt;
&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/module/nsunix&amp;quot;&lt;br /&gt;
    ns_param Hostname     www.domain.com&lt;br /&gt;
    ns_param Port         80&lt;br /&gt;
    ns_param Location     http://www.domain.com&lt;br /&gt;
    ns_param SocketFile   domain.com.nsunix&lt;br /&gt;
&lt;br /&gt;
    ns_section &amp;quot;ns/server/${servername}/modules&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    ns_param nsunix       nsunix.so&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Easy Virtual Hosting]]&lt;br /&gt;
----&lt;br /&gt;
[[Category Documentation]]&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
		
	</entry>
</feed>