I. Prerequisites

You must have Apache httpd-2.0.43 or newer (as of this writing, 2.0.47) already installed in order to build and install mod_athena. If you have installed it in /usr/local/apache2, everything will just work.

II. Building

Get the latest mod_athena code.
tar xvfz athena-x.x
cd athena-x.x
adjust module/ath.h and module/ath_types.h if you want to tune the engine

notable compile time only vars (with defaults)
    (configure script):
  • --enable-athena (enables build of binary cmdline tool-- not working)
  • --with-apache2=(auto searches path if blank)
  • --with-doc-dir=(auto sets to /usr/local/www/data/mod_athena_doc if blank)
  • --with-cgi-bin=(auto sets to /usr/local/www/cgi-bin if blank)
  • --disable-client-id (Do not pass Netscape proxy style cookie client-id)
    The X-Forwarded-For header already provides this data, and it also includes previous forwarding agents. The request originator is the first in the list, as long as upstream proxies honored this header. This header, "client-ip", mimics the old Netscape Proxy server's non-standard record of the last requester.
  • --disable-debug (turn off debug messages and asserts)
    You probably want to keep this. Very little overhead, and provides some useful info in the logs to tune shm/lock stuff on your platform.
  • --disable-debugfunc (Turn off status/debug engine function
    You probably don't need this. Useful for developers, it dumps configuration, farm, physical, and engine info formatted in a single response. Call as: your_athena_engine/status/debug?true. It requires the ?something_here.
    src/c/include/ath.h: (in line occurrence order)
    Limits the number of engine requests embedded in a single GET. The engine allows an incoming GET to actually contain more than one engine request. This is the max. More on this topic in "Sending statistics." Also see directive "AthAllowDiverseMulti."
  • all others run time changeable via directives
    src/c/include/ath_constants.h: (in line occurrence order)
  • ATH_NAME_MAX 256

    Max string length used for: farm names, physical hostnames, offline/down URLs. Kept low to cut down on shared memory size. Why use long names?


    The maximum number of physicals allowed. Affects shared memory size (which is static). Tune higher if needed.


    The maximum number of farms allowed. Affects shared memory size (which is static). Tune higher if needed.

  • ATH_REQ_STATUS      "/status"
    ATH_REQ_UPDATE      "/update"
    ATH_REQ_BALANCE     "/balance"
    ATH_REQ_MIRROR      "/mirror"
    ATH_REF_HELLO       "/hello"
    ATH_REQ_FARM        "/farm"
    ATH_REQ_PHYS        "/phys"
    ATH_REQ_ENGINE      "/engine"

    These are can all be change to shorter strings if you want to cut down on network traffic (come on, what's a couple bytes?).

III. Installation

Run make install to install the module in the modules directory of your apache2 installation. You should see "" show up there. If your doc-dir is set properly, this will also install docs. Likewise, if your cgi-bin was set correctly, this will install the perl module and app.

The next three topics provide advice on configuring the engine.