Frequently Asked Questions

From AOLserver Wiki
Jump to navigation Jump to search

(Please add new questions at the very bottom of the list. Thanks.)

What is AOLserver?

AOLserver is America Online's Open Source web server. AOLserver is the backbone of the largest and busiest production environments in the world.

AOLserver is a multithreaded, Tcl-enabled, massively-scalable and extensible web server tuned for large scale, dynamic web sites. AOLserver also includes complete database integration and a dynamic page scripting language.

What is the latest version of AOLserver?

  • The latest stable 3.4.x version is 3.4.2 released 18 September 2001.
  • The latest stable 3.5.x version is 3.5.11 released 17 October 2003.
  • The latest stable 4.0.x version is 4.0.10 released 18 January 2005.
  • The latest stable 4.5.x version is 4.5.0 released 27 June 2006.
  • Current development (CVS HEAD) is 4.5.0.

Where can I get AOLserver?

The AOLserver project is hosted at SourceForge, and file releases are available for download in the AOLserver Project Filelist.

What platforms does AOLserver support?

AOLserver is known to compile and run on the following platforms:

  • Linux 2.2 (i386), 2.4 and 2.6
  • Windows 95/98/NT/2K/XP (i386) (partially supported, see #6)
  • FreeBSD 3.4, 5, 6 (i386)
  • OpenBSD 2.5 (i386)
  • UnixWare 7.x (i386)
  • DEC Tru64 & OSF/1 4.0 (alpha)
  • Solaris 2.x (sparc), Solaris 2.10 (x86)
  • HP/UX 10 & 11 (hppa)
  • Irix 6.x (mips)
  • Apple MacOS X 10.3 (ppc), 10.4 (ppc)

How is AOLserver licensed and distributed?

Via the AOLserver Public License, viewable at

How does AOLserver performance compare to other major servers?

Brady Wetherington says: On Unix, AOLserver can generate many, many dynamic pages very quickly and reliably. It also has some special code paths designed to speed up processing of static pages (fastpath), though I don't use that very much, personally. Along with the database connection pools, it's definitely one of the highest-performance web-based database systems I've used.

How is it different from Apache HTTP Server?

The current Apache HTTP Server

  • is part of / a project of the Apache Software Foundation. The process of development and decision making is working for years and accepted by all participants
  • allows to run applications in a process-pre-forking or multi-threaded environment by design
  • is the leading webserver, so it is widely known, accepted and supported
  • is itself a subproject accompanied by lots of well known other projects and frameworks (like Ant, Jakarta, Struts...)

In contrast AOLserver

  • can do lots of use cases that are done with Apache modules with a few lines of TCL code (via registered filters and procs)
  • is bound to its multi-threaded architecture that has its own disadvantages, depending on what you want to do

How is it different from <insert other webserver>?


Where is AOLserver appropriate? Where is it not?

It is not appropriate...

  • when you want to do virtual hosting for multiple customers. For static content, AOLserver is fine - you're just serving static content. For dynamic, server-side functionality, to get the level of privilege separation necessary, you'd have to run a separate daemon per customer to ensure that one customer can't access the content/data of another's. There are apparently some folks out there who have set up AOLserver just this way and are doing just this.
  • when the code you want to use is not thread-safe (and you are not able to change that)
  • when your main application makes heavy use of cgi-tools or other scripting languages like PHP or Phython (in general: where currently no active dedicated maintainer for corresponding modules is known)
  • when you need backup of a large world wide community that uses tools, modules and code you can find and read in every single computer magazine. AOLserver and TCL are niche products, which only means they are not sexy to the broad audience, but are used intensively by a sophisticated, intelligent minority
  • when you know you would need more than one day to convince your customer to use it (in other words: if you use technology the first time don't let your most important customer be the beta tester)

It is appropriate...

  • when you want to make maximum use of your machines hardware ressources: AOLserver is a highly configurable beast that allows you to run big websites
  • when you plan to run a website that makes heavy use of one or more databases (using pooled connections)
  • when you want to cache lots or all of your static files (.html,.gif,.css.,.js ...) in your servers memory (via modules fastpath and nscache)
  • when you like the good feeling of running and coding your apps on a well-tested multi-threaded server architecture. The server never has been a process-forking one.

The idea here is if you know your requirements and your scope is fairly stable and you feel comfortable you can predict the future, and if all signs point to the app. remaining small-to-medium in usage/traffic, then pick whatever platform or technology you like the best -- it really won't make a difference. But, if you think that it's a very real possibility you'll need to scale up capacity to meet growing demand/traffic, possibly indefinitely, then yes, the hidden cost of re-architecting or migrating to a different technology can be a killer when you have to use the words "sunk cost" to describe the originally developed system. In that case, you may be better off starting with implementing with AOLserver, as its performance "ceiling" so to speak is higher than other technologies. (TODO: Benchmarks demonstrating this empirically?)

How do I get started with AOLserver?

<need to link to a newbie guide HOWTO>

How can I learn more about AOLserver?

Start by reading the Documentation, which is still a work-in-progress.

"package require" doesn't work! What's wrong?

Here's the relevant portion of a message Dossy Shiobara sent to the AOLserver mailing list back on 16 June 2000:

 set tcl_library [file join $tcl_pkgPath tcl${tcl_version}]
 source [file join $tcl_library init.tcl]
 package require works like a charm after that :-)

There you have it. Perhaps, some day, this won't be a necessary step. But, in the meantime ...

As of AOLserver 4.0 and perhaps even a late version of 3.5.x, this step is no longer necessary.

"ns_set update [ns_conn outputheaders] Content-Type" results in the server sending two copies of the Content-Type header. Why?

"ns_set update [ns_conn outputheaders $conn] Content-Type {application/x-tcl}" does not work in .adp files as I wish. The server always returns two copies of the Content-Type header, one as application/x-tcl, another as text/html and clients(galeon, tcl http package) always use the second. How do I remove the second Content-Type?

Good question -- this is really a bug that needs to be fixed in the server code itself.

Note: This seems to be fixed in newer version of the aolserver; tried 4.0.10 and it appears to work.--Gustafn 06:17, 15 September 2007 (EDT)

How can I get Tclet scripts served from AOLserver to run inside the Tcl Plugin?

Someone asks: I have an aolserver for OpenACS. I installed Tcl Plugin which works well with classic Tclets on Tcl Plugin Home Pages. But with Aolserver, it doesn't work.... Do you know the answer of this?

How can I compile AOLserver on HP-UX, both 10.20 and 11.x?

Dossy: Good question. If I had easy access to HP-UX machines, I'd try it myself. AOLserver 4.x should hopefully build on HP-UX without any changes, but I'm only guessing.

HPUX doesn't implement a lot of BSD/POSIX IPC functions, or so I hear.

I'm getting an error compiling AOLserver about POLLIN, POLLOUT and POLLPRI being redefined. What's wrong?

AOLserver requires that the "configure" script be run using the GNU C (gcc) compiler. Try running the configure script like this:

   $ CC=gcc ./configure --args...

Does AOLserver support HTTP Keep-Alive? I'm sending a HTTP/1.1 request via httperf and AOLserver isn't doing Keep-Alive like Apache does! What's wrong?

Actually, nothing is wrong. You just need to tell httperf to include the headers that tell AOLserver to expect multiple requests per connection. Add '--add_header "Connection: Keep-Alive\n"' to your httperf request.

The issue is that Apache and AOLserver chose opposite default behaviors when interpretting RFC 2068 section

  An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to
  maintain a persistent connection unless a Connection header including
  the connection-token "close" was sent in the request. If the server
  chooses to close the connection immediately after sending the
  response, it SHOULD send a Connection header including the
  connection-token close.
  An HTTP/1.1 client MAY expect a connection to remain open, but would
  decide to keep it open based on whether the response from a server
  contains a Connection header with the connection-token close. In case
  the client does not want to maintain a connection for more than that
  request, it SHOULD send a Connection header including the
  connection-token close.

The key here is "MAY" -- AOLserver (currently, as of 4.0.10) chooses not to assume a Keep-Alive connection unless the client explicitly requests it by sending "Connection: Keep-Alive" in the HTTP request header. This may change in the future (HTTP/1.1 requests default to Keep-Alive unless the client explicitly sends "Connection: close" -- apparently this is how Apache works).

AOLserver 4.0.10 is consuming all my memory

Bas Scheffers says: What version of Tcl did you use? Use 8.4.11 or 8.4.6, but nothing in between as they have a big memory leak.

Note that debian sarge includes tcl 8.4.9 (as of 2006-01-03).

How do I customize standard HTTP responses?

# 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