"Apache was designed from scratch to be modular; that is, the original programmers assumed that it would be extended by other developers, who would write small pieces of code which could be integrated into Apache with ease. They did this by creating a modular API and a well-defined series of phases that every request went through, so that customizing a particular aspect of Apache is often as simple as stringing together API methods that would be run during a particular phase of the request. These phases included everything from server initialization itself (when Apache reads its configuration files), to translating a requested URL into a filename on the server, to logging the results of the transaction, and everything in between."
"Developers were quick to respond, and to date there are hundreds of Apache modules available. Many of them are registered with the Apache project, and can be found at modules.apache.org. Chances are pretty good that if there is something you need, someone else has also needed it in the past, and written it. The important question, of course, is how to take advantage of these great resources."
"Apache's modularity can potentially make configuration complicated. By default, Apache ships with a number of useful modules, and the most generally useful of these are enabled by default. Compiling Apache as it is distributed will give you a highly functional, and very flexible, web server capable of handling most of the needs of a general purpose web site."