Annotated AOLserver Configuration Reference
(This looks pretty old... It does not accurately reflect the configuration options available in the latest code. --SD)
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
# # 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 # 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 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 maxkeepalive 100 ;# Max no. of conns in keepalive state 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 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 # # 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 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 minthreads 0 ;# Tune this to scale your server ns_param threadtimeout 120 ;# Idle threads die at this rate # Limits ns_param maxheaders 16384 ;# Max no. of headers 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. 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 ns_param cachemaxentry 8192 ;# Largest file size allowable in cache ns_param cachemaxsize expr 5000*1024 ;# Size of fastpath cache ns_param mmap false ;# Use mmap() for cache # # Tcl interpreter # 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 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 # # 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 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 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
# # 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