Difference between revisions of "Annotated AOLserver Configuration Reference"

From AOLserver Wiki
Jump to navigation Jump to search
(imported from WiKit id 1335)
 
(added to fastpath options: directoryfile, directorylisting, directoryproc and directoryadp)
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
(This looks pretty old... It does not accurately reflect the configuration options available in the latest code. --SD)
+
'''[ Please make comments on the [[Talk:Annotated_AOLserver_Configuration_Reference]] page. ]'''
 
 
''Thanks, a warning was definitely needed.  I copied this from http://aolserver.com but if there is a newer version around somewhere, we should certainly update the information below.  I mostly wanted a place to document the (new in 4.01) maxinput param, which is a 4.0 upgrade gotcha. --JR''
 
 
 
It would be nice if when you turned on Debug level logging (or some other higher level) AOLserver spat out all the config settings it was using, where it got them from, and what the default is.  The information would alwasy be accurate, and it would be an aid in debugging.  --SD
 
 
 
''Unfortunately, I see no way you could get that kind of introspection without humongous code changes.  e.g. consider in driver.c''
 
    if (!Ns_ConfigGetInt(path, "maxinput", &n) || n < 1) {
 
n = 1000 * 1024; /* 1m. */
 
    }
 
    drvPtr->maxinput = _MAX(n, 1024);
 
''The default for this param is defined a level up from the config file functions level, and involves calculation and bounds checking. --JR''
 
 
 
Well sure, you'd have to *touch* a lot of code, but the change would be trivial, and it doesn't require everything to change at once. Look at GetInt and GetBool in nsconf.c: there's already code using wrappers for convenience.
 
 
 
In the example above the bounds checking amounts to ensuring a positive integer, which could be expressed as Ns_ConfigGetPositiveInt etc., and the calculation is just a convenience for source code representation.
 
 
 
I'm sure there's some corner cases you couldn't or wouldn't want to handle, but you could cover the vast majority of it, cleaning up a lot of code in the process. --SD
 
 
 
 
 
 
 
----
 
  
 +
<pre>
 
     #
 
     #
 
     # config-reference.tcl.txt --
 
     # config-reference.tcl.txt --
Line 37: Line 17:
 
     ns_section "ns/parameters"
 
     ns_section "ns/parameters"
 
     ns_param  home            $home    ;# Server's home directory
 
     ns_param  home            $home    ;# Server's home directory
   
+
     
    # Data structures
 
    ns_param  dstringcachemaxentries 10 ;# Max no. of Dstrings to put on cache
 
    ns_param  dstringcachemaxsize [[expr 3*1024]]
 
    ns_param  iobufsize      16000    ;# Buffer size suitable for I/O
 
   
 
 
     # Limits
 
     # Limits
    ns_param  keepalivetimeout 30      ;# Max time conn is kept alive (keepalive)
 
                                        ;#  (set to 0 to disable keepalive)
 
 
     ns_param  listenbacklog  32        ;# Max length of pending conn queue
 
     ns_param  listenbacklog  32        ;# Max length of pending conn queue
    ns_param  maxkeepalive    100      ;# Max no. of conns in keepalive state
 
 
     ns_param  schedmaxelapsed 2        ;# Warn when waiting on really long procs
 
     ns_param  schedmaxelapsed 2        ;# Warn when waiting on really long procs
 
     ns_param  shutdowntimeout 20        ;# Secs to wait on shutdown if open conns
 
     ns_param  shutdowntimeout 20        ;# Secs to wait on shutdown if open conns
Line 65: Line 37:
 
      
 
      
 
     # Miscellaneous
 
     # Miscellaneous
    ns_param  checkexitcode  false    ;# Check exit code on forked process
 
    ns_param  crashcmd        ns_crash  ;# A Tcl command that dumps core.
 
 
     ns_param  mailhost        smtp.yourcompany.com ;# SMTP host for ns_sendmail
 
     ns_param  mailhost        smtp.yourcompany.com ;# SMTP host for ns_sendmail
 
      
 
      
Line 75: Line 45:
 
     ns_section "ns/threads"
 
     ns_section "ns/threads"
 
     ns_param  mutexmeter      true      ;# measure lock contention
 
     ns_param  mutexmeter      true      ;# measure lock contention
     ns_param  stacksize      [[expr 128*1024]]  ;# stack size per thread (in bytes)
+
     ns_param  stacksize      [expr 128*1024]  ;# stack size per thread (in bytes)
 
      
 
      
 
      
 
      
Line 111: Line 81:
 
     # Tuning options
 
     # Tuning options
 
     ns_param  connsperthread  0        ;# Normally there's one conn per thread
 
     ns_param  connsperthread  0        ;# Normally there's one conn per thread
    ns_param  flushcontent    false    ;# Flush all data before returning
 
    ns_param  maxconnections  100      ;# Max connections to put on queue
 
    ns_param  maxdropped      0        ;# Shut down if dropping too many conns
 
 
     ns_param  maxthreads      20        ;# Tune this to scale your server
 
     ns_param  maxthreads      20        ;# Tune this to scale your server
 
     ns_param  minthreads      0        ;# Tune this to scale your server
 
     ns_param  minthreads      0        ;# Tune this to scale your server
     ns_param  threadtimeout  120      ;# Idle threads die at this rate
+
     ns_param  threadtimeout  120      ;# Idle timeout for connection threads
 +
    ns_param  maxconnections  100      ;# Max connections per connection thread before it is shut down
 +
    ns_param  spread          20        ;# Variance factor for threadtimeout and maxconnections
 +
                                        ;# to prevent mass mortality of theads (e.g. +-20%)
 
      
 
      
 
     # Limits
 
     # Limits
    ns_param  maxheaders      16384    ;# Max no. of headers from client
 
 
     ns_param  maxline        8192      ;# Max line length from client
 
     ns_param  maxline        8192      ;# Max line length from client
    ns_param  maxpost        65536    ;# Max bytes on a POST
 
    ns_param  sendfdthreshold 2048      ;# Min size of file descriptor to send
 
   
 
    # Performance statistics gathering
 
    ns_param  globalstats    true      ;# Enable built-in statistics
 
    ns_param  urlstats        true      ;# Enable URL statistics
 
    ns_param  maxurlstats    1000      ;# Max number of URL's to do stats on
 
 
      
 
      
 
     # Directory listings can be generated with an ADP or a Tcl proc.
 
     # Directory listings can be generated with an ADP or a Tcl proc.
Line 150: Line 112:
 
     #
 
     #
 
     ns_section "ns/server/${servername}/fastpath"
 
     ns_section "ns/server/${servername}/fastpath"
     ns_param  cache          true      ;# Enable cache for normal URLs
+
     ns_param  cache          true      ;# Enable cache for normal URLs; default: false
     ns_param  cachemaxentry  8192      ;# Largest file size allowable in cache
+
     ns_param  cachemaxentry  8192      ;# Largest file size allowable in cache; default: cachemaxsize/10
     ns_param  cachemaxsize    [[expr 5000*1024]] ;# Size of fastpath cache
+
     ns_param  cachemaxsize    [expr 5000*1024] ;# Size of fastpath cache; default: 5120000
     ns_param  mmap            false    ;# Use mmap() for cache
+
     ns_param  mmap            false    ;# Use mmap() for cache; default: false
 +
    ns_param  directoryfile  index.adp,index.tcl,index.html,index.htm
 +
                                        ;# String. Directory index/default page to look for.
 +
                                        ;# Optional, default is directoryfile parameter set in
 +
                                        ;# ns/server/${servername} section.
 +
    ns_param  directorylisting fancy    ;# Directory listing style.
 +
                                        ;# Optional, can be "fancy" or "simple".
 +
    ns_param  directoryproc _ns_dirlist ;# String. Name of Tcl proc to use to display
 +
                                        ;# directory listings. Optional, default is to use
 +
                                        ;# _ns_dirlist. You can either specify directoryproc,
 +
                                        ;# or directoryadp - not both.
 +
    ;#ns_param directoryadp dir.adp      ;# String. Name of ADP page to use to display directory
 +
                                        ;# listings. Optional. You can either specify directoryadp
 +
                                        ;# or directoryproc - not both.
 
      
 
      
 
     #
 
     #
Line 159: Line 134:
 
     #
 
     #
 
     ns_section "ns/server/${servername}/tcl"
 
     ns_section "ns/server/${servername}/tcl"
    ns_param  autoclose      true      ;# Close files the Tcl interp opened
 
 
     ns_param  debug          false    ;# Names of files sourced is logged
 
     ns_param  debug          false    ;# Names of files sourced is logged
 
     ns_param  nsvbuckets      8        ;# No. of buckets to hold nsv's
 
     ns_param  nsvbuckets      8        ;# No. of buckets to hold nsv's
    ns_param  statlevel      0        ;# How many levels deep to run tclstats
 
    ns_param  statmaxbuf      100      ;# Maximum entries in tclstats table
 
 
     ns_param  library  "$home/servers/${servername}/modules/tcl" ;# Private tcl library for the server
 
     ns_param  library  "$home/servers/${servername}/modules/tcl" ;# Private tcl library for the server
 
      
 
      
Line 180: Line 152:
 
     # ADP tuning
 
     # ADP tuning
 
     ns_param  cache          true      ;# In-memory cache of ADP's
 
     ns_param  cache          true      ;# In-memory cache of ADP's
     ns_param  cachesize      [[expr 5000*1024]]
+
     ns_param  cachesize      [expr 5000*1024]
    ns_param  taglocks        false    ;# Enable post-ini creation of ADP tags
 
    ns_param  threadcache    false    ;# default for Tcl 7.6 (nsd76)
 
    ns_param  threadcache    true      ;# default for Tcl 8.2 (nsd82)
 
 
      
 
      
 
     # ADP special pages
 
     # ADP special pages
Line 206: Line 175:
 
     ns_param  address        $address  ;# This is not the same as your host addr
 
     ns_param  address        $address  ;# This is not the same as your host addr
 
     ns_param  location        "url"    ;# URL for auto-redirects (trailing slash)
 
     ns_param  location        "url"    ;# URL for auto-redirects (trailing slash)
     ns_param  maxinput        [[expr 5 * 1024 * 1024]]  ;# Maximum file size for uploads in bytes, default is 1MB, new in AOLserver 4.01
+
     ns_param  maxinput        [expr 5 * 1024 * 1024]  ;# Maximum file size for uploads in bytes, default is 1MB, new in AOLserver 4.01
 
+
    ns_param  keepwait        30        ;# Max time conn is kept alive (keepalive)
 +
                                        ;#  (set to 0 to disable keepalive)
 
      
 
      
 
     #
 
     #
Line 374: Line 344:
 
     #
 
     #
 
     ns_param  tcl_module          tcl
 
     ns_param  tcl_module          tcl
 +
</pre>
 +
 +
[[Category:Documentation]]
 +
[[Category:Configuration]]

Latest revision as of 09:54, 9 February 2009

[ Please make comments on the Talk:Annotated_AOLserver_Configuration_Reference page. ]

    #
    # config-reference.tcl.txt --
    #
    #      Annotated AOLserver Configuration Reference
    #
    #      Nearly every AOLserver configuration variable is represented
    #      here.  This file is provided as a reference -- please do not load
    #      this into your server.
    #
    
    #
    # Global parameters
    #
    ns_section "ns/parameters"
    ns_param   home            $home     ;# Server's home directory
       
    # Limits
    ns_param   listenbacklog   32        ;# Max length of pending conn queue
    ns_param   schedmaxelapsed 2         ;# Warn when waiting on really long procs
    ns_param   shutdowntimeout 20        ;# Secs to wait on shutdown if open conns
    
    # Server logging
    ns_param   dev             true      ;# Display logging with "Dev" severity
    ns_param   debug           false     ;# Display logging with "Debug" severity
    ns_param   logexpanded     false     ;# true = double-spaced server.log
    ns_param   logroll         false     ;# Roll server.log every 24 hours.
    ns_param   maxbackup       10        ;# Max number of old server.log files
    ns_param   pidfile         "nspid"   ;# PID of server (named "nspid.PORT")
    ns_param   serverlog       "server.log" ;# Filename of server.log
    
    # DNS tuning
    ns_param   dnscache        true      ;# In-memory cache of DNS lookups
    ns_param   dnscachetimeout 60        ;# How long to keep hostnames in cache
    
    # Miscellaneous
    ns_param   mailhost        smtp.yourcompany.com ;# SMTP host for ns_sendmail
    
    
    #
    # Thread library (nsthread) parameters
    #
    ns_section "ns/threads"
    ns_param   mutexmeter      true      ;# measure lock contention
    ns_param   stacksize       [expr 128*1024]  ;# stack size per thread (in bytes)
    
    
    #
    # MIME types.
    #
    # Note: AOLserver already has an exhaustive list of MIME types, but in
    # case something is missing you can add it here.
    #
    ns_section "ns/mimetypes"
    ns_param   ".xls"          "application/vnd.ms-excel"
    ns_param   default         "*/*"     ;# MIME type for unknown extension
    ns_param   noextension     "*/*"     ;# MIME type for missing extension
    
    
    ############################################################
    #
    # Server-level configuration
    #
    #  There is only one server in AOLserver, but this is helpful when multiple
    #  servers share the same configuration file.  This file assumes that only
    #  one server is in use so it is set at the top.
    #
    
    ns_section "ns/servers"
    ns_param   $server         $servername ;# Name of virtual server.
    
    #
    # Server parameters
    #
    ns_section "ns/server/${servername}"
    ns_param   directoryfile   $directoryfile ;# List of files to use (index.html)
    ns_param   pageroot        $pageroot ;# Directory under which all pages live
    
    # Tuning options
    ns_param   connsperthread  0         ;# Normally there's one conn per thread
    ns_param   maxthreads      20        ;# Tune this to scale your server
    ns_param   minthreads      0         ;# Tune this to scale your server
    ns_param   threadtimeout   120       ;# Idle timeout for connection threads
    ns_param   maxconnections  100       ;# Max connections per connection thread before it is shut down
    ns_param   spread          20        ;# Variance factor for threadtimeout and maxconnections
                                         ;# to prevent mass mortality of theads (e.g. +-20%) 
    
    # Limits
    ns_param   maxline         8192      ;# Max line length from client
    
    # Directory listings can be generated with an ADP or a Tcl proc.
    ns_param   directoryadp    $home/dirlist.adp  ;# Choose one or the other
    ns_param   directoryproc   _ns_dirlist        ;#  ...but not both!
    ns_param   directorylisting simple   ;# Can be simple or fancy (for ns_dirlist)
    
    # Miscellaneous
    ns_param   checkmodifiedsince true   ;# Check url if no If-Modified-Since?
    ns_param   enableaolpress  false     ;# Enable extra features used by AOLpress
    ns_param   headercase      preserve  ;# tolower, toupper, preserve
    
    #
    # Internal redirects
    #
    ns_section "ns/server/${servername}/redirects"
    ns_param   404 "/notfound.html"      ;# Not Found error page
    ns_param   500 "/servererror.html"   ;# Server Error page
    
    #
    # Fastpath serves HTML
    #
    ns_section "ns/server/${servername}/fastpath"
    ns_param   cache           true      ;# Enable cache for normal URLs; default: false
    ns_param   cachemaxentry   8192      ;# Largest file size allowable in cache; default: cachemaxsize/10
    ns_param   cachemaxsize    [expr 5000*1024] ;# Size of fastpath cache; default: 5120000
    ns_param   mmap            false     ;# Use mmap() for cache; default: false
    ns_param   directoryfile   index.adp,index.tcl,index.html,index.htm 
                                         ;# String. Directory index/default page to look for. 
                                         ;# Optional, default is directoryfile parameter set in 
                                         ;# ns/server/${servername} section.
    ns_param   directorylisting fancy    ;# Directory listing style. 
                                         ;# Optional, can be "fancy" or "simple". 
    ns_param   directoryproc _ns_dirlist ;# String. Name of Tcl proc to use to display
                                         ;# directory listings. Optional, default is to use
                                         ;# _ns_dirlist. You can either specify directoryproc,
                                         ;# or directoryadp - not both.
    ;#ns_param directoryadp dir.adp      ;# String. Name of ADP page to use to display directory 
                                         ;# listings. Optional. You can either specify directoryadp 
                                         ;# or directoryproc - not both.
    
    #
    # Tcl interpreter
    #
    ns_section "ns/server/${servername}/tcl"
    ns_param   debug           false     ;# Names of files sourced is logged
    ns_param   nsvbuckets      8         ;# No. of buckets to hold nsv's
    ns_param   library  "$home/servers/${servername}/modules/tcl" ;# Private tcl library for the server
    
    #
    # ADP (AOLserver Dynamic Page) configuration
    #
    ns_section "ns/server/${servername}/adp"
    
    # ADP features
    ns_param   map             "/*.adp"  ;# Extensions to parse as ADP's
    ns_param   map             "/*.html" ;# Any extension can be mapped
    ns_param   enableexpire    true      ;# Set "Expires: now" on all ADP's
    ns_param   enabledebug     true      ;# Turn on Tclpro debugging with "?debug"
    ns_param   debuginit "ns_adp_debuginit" ;# Debug procedure
    
    # ADP tuning
    ns_param   cache           true      ;# In-memory cache of ADP's
    ns_param   cachesize       [expr 5000*1024]
    
    # ADP special pages
    ns_param   errorpage  ${pageroot}/errorpage.adp        ;# Pretty-print ADP errors with an ADP
    ns_param   startpage  ${pageroot}/startpage.inc        ;# Page to include for all ADP's
    
    
    #
    # ADP custom parsers -- see adp.c
    #
    ns_section "ns/server/${servername}/adp/parsers"
    ns_param   adp             ".adp"   ;# The simple parser looks for <\% ... \%>
    ns_param   fancy           ".adp"   ;# The fancy parser does a lot more.
    
    
    #
    # Socket driver module (HTTP)  -- nssock
    #
    ns_section "ns/server/${servername}/module/nssock"
    ns_param   port            $httpport ;# Port for HTTP (typically 80)
    ns_param   hostname        $host     ;# This is not the same as your hostname
    ns_param   address         $address  ;# This is not the same as your host addr
    ns_param   location        "url"     ;# URL for auto-redirects (trailing slash)
    ns_param   maxinput        [expr 5 * 1024 * 1024]  ;# Maximum file size for uploads in bytes, default is 1MB, new in AOLserver 4.01
    ns_param   keepwait        30        ;# Max time conn is kept alive (keepalive)
                                         ;#   (set to 0 to disable keepalive)
    
    #
    # Socket driver module (HTTPS) -- nsssl
    #
    ns_section "ns/server/${servername}/module/nsssl"
    ns_param   port            $httpsport ;# Port for HTTPS (typically 443)
    ns_param   hostname        $host     ;# This is not the same as your hostname
    ns_param   address         $address  ;# This is not the same as your host addr
    ns_param   keyfile         ${home}/servers/${servername}/modules/nsssl/keyfile.pem
    ns_param   certfile        ${home}/servers/${servername}/modules/nsssl/certfile.pem
    
    
    #
    # Control port -- nscp
    #
    ns_section "ns/server/${servername}/module/nscp"
    ns_param   port            9999      ;# Control port listens on port 9999
    ns_param   address         "127.0.0.1" ;# For security, use 127.0.0.1 only
    
    # Control port users
    ns_section "ns/server/${servername}/module/nscp/users"
    # The default password for nsadmin is "x". You should change it.
    # type "ns_crypt newpassword salt" and put the encrypted string below.
    ns_param user "nsadmin:t2GqvvaiIUbF2:" ;# sample user="nsadmin", pw="x".
    
    #
    # Access log -- nslog
    #
    ns_section "ns/server/${servername}/module/nslog"
    ns_param   file            "access.log"
    ns_param   formattedtime   true      ;# true=common log format
    ns_param   logcombined     false     ;# true==NCSA combined format
    ns_param   maxbackup       5         ;# Max number to keep around when rolling
    ns_param   rollhour        0         ;# Time to roll log
    ns_param   rolllog         true      ;# Should we roll log?
    ns_param   rollonsignal    true      ;# Roll log on SIGHUP
    
    #
    # CGI interface -- nscgi
    #
    # Note: CGI is *vastly* inferior to ADP's or even built-in Tcl libraries.
    #
    ns_section "ns/server/${servername}/module/nscgi"
    ns_param   debug           false     ;# Be chatty in log
    ns_param   gethostbyaddr   false     ;# Whether to do reverse DNS lookups
    ns_param   limit           0         ;# Max number of concurrent CGI processes
    ns_param   maxoutput       10240     ;# Max bytes allowed from external process
    ns_param   buffersize      8192      ;# Buffer output from external process
    ns_param   map  "GET /cgi /usr/local/cgi"        ;# Where your CGI executables live (GET)
    ns_param   map  "POST /cgi /usr/local/cgi"       ;# Where your CGI executables live (POST)
    
    # CGI environment variable handling -- See admin guide
    ns_param   systemenvironment false   ;# Copies environment from nsd start shell
    
    
    #
    # Access control (permissions) -- nsperm
    #
    ns_section "ns/server/${servername}/module/nsperm"
    
    #
    # Unix domain socket driver -- nsunix
    #
    ns_section "ns/server/${servername}/module/nsunix"
    ns_param   hostname        "host"    ;# Hostname used in response to client
    ns_param   port            "port"    ;# Port to listen on
    ns_param   socketfile      "path.name" ;# UNIX domain socket driver
    
    #
    # Virtual Hosting redirector -- nsvhr
    #
    ns_section "ns/server/${servername}/module/nsvhr"
    ns_param   busyurl         "url"     ;# Redirect here if back-end times out
    ns_param   errorurl        "url"     ;# Redirect here on proxy errors
    ns_param   method          "GET"     ;# Methods allowed to proxy
    ns_param   method          "POST"    ;# Methods allowed to proxy (can have >1)
    ns_param   timeout         30        ;# Timeout waiting for back-end
    
    # Register hosts to proxy
    ns_section "ns/server/${servername}/module/nsvhr/maps"
    ns_param   "www.tcpsocket.com"    "http://127.0.0.0:2000" ;# HTTP proxy
    ns_param   "www.domainsocket.com" "unix://somehost"       ;# Domain socket
    
    #
    # Database drivers
    #
    # Two pools are given here.  Sybase uses the Sybase client libraries,
    # obtained from Sybase.  Postgres is freely available at
    # www.postgresql.org.  Sybase uses an external proxy daemon while
    # Postgres uses an internal driver.  The Sybase driver requires some
    # configuration in ns/db/driver/sybase_driver to tell th "nsext.so"
    # driver where to find the nssybpd executable and some other things.
    # The Postgres driver doesn't need any of that because it's internal
    # and does not use nsext.so.
    #
    ns_section "ns/db/drivers"
    ns_param   sybase_driver   nsext.so       ;# Use nsext.so for a proxy daemon
    ns_param   postgres_driver nspostgres.so  ;# An internal driver
    
    ns_section "ns/db/driver/sybase_driver"
    ns_param   localdaemon     nssybpd        ;# Name of the proxy daemon executable
    ns_param   param           path_to_sybase ;# Usually the $SYBASE env var
    
    ns_section "ns/db/pools"
    ns_param   sybase_pool    "Sybase Pool"
    ns_param   postgres_pool  "Postgres Pool"
    
    ns_section "ns/db/pool/sybase_pool"
    ns_param   driver          sybase_driver
    ns_param   datasource      SERVER_NAME:database_name
    ns_param   user            user_name
    ns_param   password        password
    ns_param   connections     1
    ns_param   logsqlerrors    true      ;# Verbose SQL query error logging
    ns_param   verbose         false     ;# Verbose error logging
    ns_param   maxidle         600       ;# Max time to keep idle db conn open
    ns_param   maxopen         3600      ;# Max time to keep active db conn open
    
    ns_section "ns/db/pool/postgres_pool"
    ns_param   driver          postgres_driver
    ns_param   datasource      HOSTNAME:PORT:database_name
    ns_param   user            user_name
    ns_param   password        password
    ns_param   connections     1
    ns_param   logsqlerrors    true      ;# Verbose SQL query error logging
    ns_param   verbose         false     ;# Verbose error logging
    ns_param   maxidle         600       ;# Max time to keep idle db conn open
    ns_param   maxopen         3600      ;# Max time to keep active db conn open
    
    
    #
    # Accessing DB pools
    #
    # In the case of virtual servers you can give different virtual
    # servers access to different databases, or you can let them access
    # them all.  AOLserver 3.x does not use virtual servers so the only
    # useful value is "*", but if you use one config file for multiple nsd
    # processes, or you are using a version of AOLserver that supports
    # virtual servers, then you should list the pools you want to access.
    #
    ns_section "ns/server/${servername}/db"
    ns_param pools          *            ;# Wildcard gives access to all
    ns_param defaultpool    sybase_pool
    
    
    #
    # Modules to load
    #
    # Note: Only load the modules you are actually going to use.
    #
    ns_section "ns/server/${servername}/modules"
    ns_param   nssock             nssock.so
    ns_param   nsssl              nsssle.so
    ns_param   nscp               nscp.so
    ns_param   nslog              nslog.so
    ns_param   nscgi              nscgi.so
    ns_param   nsperm             nsperm.so
    
    #
    # Loading a Tcl module
    #
    # This example shows a Tcl module, called "tcl_module", has its code
    # in the AOLserver Tcl library in either the modules/tcl/tcl_module
    # directory or servers/servername/modules/tcl/tcl_module directory.
    #
    ns_param   tcl_module          tcl