Easy Virtual Hosting

From AOLserver Wiki
Jump to navigation Jump to search

So having played around with virtual hosting for a while I felt that I needed something that would make it easier to add domains. Thus allowing anyone in my team to make a simple change in a txt file, and not have to change any configurations.

So I came up with a little virtualhosting.tcl file The layout is as follows, customize paths as you see fit.

  /data/servers/nsshutdown/conf/nsd.tcl (main nsd config)
  /data/servers/nsshutdown/conf/virtualhosting.tcl (hosting code)
  /data/servers/vhosts/conf/domains/<domain.com> (host names)
  /data/servers/vhosts/<domain.com>/<cname>/
                                           logs/
                                           pages/
                                           tcl/
        

To begin with in the top of nsd.tcl source in the virtualhosting.tcl and register the domains.

nsd.tcl

  source /data/servers/nsshutdown/conf/virtualhosts.tcl
  admin.registerDomains <domain.com> <domains root>
  # The hostname and address should be set to actual values.
  set hostname               nsshutdown.com
  set address                ns_info address
  ----- rest of normal nsd config here.
  <domain.com> should be the name of the top level domain your hosting
  <domains root> should be the path for the domains server roots 
  /data/servers/vhosts/<domains root>/<page root>
  The cnames are defined in /data/servers/vhosts/conf/domains/<domain.com>
  As lines containing
  <cname> <page root>
  


virtualhosting.tcl

  proc admin.getDomains {topLevel} {
      # admin.getDomains
      # args: top level domain
      # return: lists of cname and page root
      #
      # get all c-class domains for a top level domain
      # format of file <cname (without domain)> <page root> 
        
      set fh open /data/servers/vhosts/conf/domains/$topLevel r
      set hosts read -nonewline $fh
      close $fh
      return split $hosts
  }
  
  
  
  
  proc admin.registerDomains {topLevel base} {
  
      # admin.registerDomains
      # args: top level domain, domain base dir containing domain config files
      # return: null
      # register all sub domains for a top level domain
      set directoryfile index.adp,index.html,index.htm,index.xhtml,index.xht,index.php
      set basedir /data/servers/vhosts/$base
      set domains admin.getDomains $topLevel
      set bindir  [[file dirname [ns_info nsd]]]
  
      foreach {host hostname} $domains {
          # set up page root and directory files
   
          ns_section  "ns/server/${host}"
             ns_param    pageroot       ${basedir}/${host}/pages
             ns_param    directoryfile  $directoryfile
             ns_param    enabletclpages false
          # register server name
  
          ns_section "ns/servers"
             ns_param   $host  "${hostname}.${topLevel}"
          # configure nssock to go to registered server
  
          ns_section "ns/module/nssock/servers"
             ns_param   $host   "${hostname}.${topLevel}"
             ns_param   $host   "${hostname}.${topLevel}:80"
          # configure adp pages
  
          ns_section "ns/server/${host}/adp"
             ns_param   map     "/*.adp"
             ns_param   enableexpire  false
             ns_param   enabledebug   false
          # set up modules for server type
          # be carefull several modules are not reusable across
          # virtual servers, such as lib php.!
  
          ns_section "ns/server/${host}/modules"
             ns_param   nslog ${bindir}/nslog.so
          # configure seperate access logs for each server 
             
          ns_section "ns/server/${host}/module/nslog"
             ns_param   rolllog        true
             ns_param   rollonsignal   true
             ns_param   rollhour       0
             ns_param   maxbackup      5
             ns_param   logreqtime     true
             ns_param   file           ${basedir}/${host}/logs/access.log
  
          # configure tcl for server
          ns_section "ns/server/$host/tcl"
             ns_param   autoclose      true
             ns_param   debug          false
             ns_param   nsvbuckets     8
             ns_param   statlevel      0
             ns_param   statbuff       100
             ns_param   library           ${basedir}/${host}/tcl
      }
  
  }


Example usage Create a server for made-up.com, and cname of here.made-up.com

Take the regular nsd.tcl and just set your server names and ports correctly. Should be a simple change as below

  • nsd.tcl
  set httpport               80
  set httpsport              443
  # The hostname and address should be set to actual values.
  set hostname               made-up.com
  set address                ns_info address
  set servername             "made-up"
  set serverdesc             "made-up"
  # added virtual server config
  source /data/servers/made-up/conf/virtualhosts.tcl
  admin.registerDomains made-up.com made-up
  # rest is normal nsd.tcl or sample-config.tcl that comes with
  # aolserver


Set up here.made-up.com

  mkdir -p /data/servers/vhosts/conf/domains/
  mkdir -p /data/servers/vhosts/made-up/
  mkdir -p /data/servers/vhosts/made-up/here/pages
  mkdir -p /data/servers/vhosts/made-up/here/logs
  mkdir -p /data/servers/vhosts/made-up/here/tcl


  echo "here here" >>/data/servers/vhosts/domains/made-up.com

Start up aolsever and hit here.made-up.com


Category Documentation