Deploying | Configuration | Customizing
Configuring Toadhttpd
Toadhttpd will accept all of the same command line options as the httpd example from tcllib.In addition it provides the following default behaviors:
- If the file config.tcl is present in adjacent to httpd.tcl, it is read in as if the configuration_file paramter was given on the command line.
- If the directory htdocs is present in the folder that contains the configuration_file it is assumed to be the value for doc_root (if one is not given either on the command line or in the config file.)
- If the directory log is present in the folder that contains the configuration_file it is assumed to be the value for logdir (if one is not given either on the command line or in the config file.)
configuration_file (config.tcl)
The configuration_file is source by the new httpd::server instance prior to invoking the start method. Because it is sourced by the object itself, you can exercise all of the object's methods via the my mechanism.etoyoc.com is probably as complicated a setup as one will encounter in the wild. It serves a number of top level domains, mixes static content and dynamic content, and even plays dispatcher to scgi based fossil repositories. On the page Etoyoc.com we will explore, in depth, how Sean configured etoyoc.com and how you can do the same to create your own site. For now here is a simple setup to give you a sense of what is in the file:
# Set a configuration parameter for the server my config set doc_ttl 900 # Load a plugin package require toadhttpd::sqlite package require toadhttpd::bouncer package require toadhttpd::fossil ## # Inject a plugin behavior into the server object ## my plugin bouncer my plugin sqlite ### # Specify how URLs are responded to ### # Someone asking for /ccvv is up to no good, send them to the honeypot my uri add % /ccvv { mixin toadhttpd::content.honeypot } ### # If someone asks for http://fossil.etoyoc.com/index* send them to the # proper URL # NOTE: This rule only applies if the server requested was fossil.etoyoc.com ### my uri add fossil.etoyoc.com {/fossil/ /fossil/index%} { mixinmap {reply httpd::content.redirect} LOCATION http://fossil.etoyoc.com/fossil } # The page /fossil is a dynamic page with a list of fossil repos my uri add fossil.etoyoc.com /fossil { mixinmap {reply toadhttpd::content.fossil_root} fossil_root /opt/fossil prefix fossil } # Everything under that page is dispatched out to fossil SCGI # proxies my uri add fossil.etoyoc.com /fossil/% { mixinmap {reply toadhttpd::content.fossil_node_scgi} prefix fossil fossil_root /opt/fossil } # The "trivial" plugin provides a cute little # database or random facts. Accept requests at either # /trivia or /fortune my uri add % {/trivia /fortune} { mixinmap { reply ::etoyoc::content.trivia style ::etoyoc::style } } # Add /trivia to the list of places we don't like # robots visiting my robots.txt add /trivia ### # Note that any URL that hasn't matched one of the rules # above will be handled by the default hander: find the file # under doc_root, or fail with 404 ###