Apache is a widely used web server available for many platforms, and provides a consistant, scalable, and secure mechanism with which to serve web pages. It is the most popular HTTP server on the web.

The name, like everything else in the computing industry, is a pun (or terrible joke, either way). Apache came out of the ashes of a pile of other servlet components all held together by patches, hotfixes, and little hacks. Thus it was a "patchy" server.

(Okay, you can stop groaning now. It was terrible when i first heard that too)

A song by the Incredible Bongo Band. This song is famous because of a sweet drum break in the song which has been sampled and cut up millions of times for use in hiphop and jungle music.

A group of tribes of Native American Indians from the U.S. Southwest, mostly eastern Arizona. Their ancestors are believed by anthropologists to have come south from Alaska and northwestern Canada between 500 and 1000 years ago. (Apache oral history disputes this and says they were nomads who just roamed the southwest.) Geronimo was an Apache leader.

The Apache tribe is a very noble and interesting one. Breaking into six distinct regional groups (Western Apache, Chiricahua, Mescalero, Jicarilla, Lipan, and Kiowa Apache), the Apache nation stretched from Arizona to Texas. Apaches were mainly hunters of deer, gophers, wild turkeys and lizards.

Apaches were great hunters but also great warriors. Apache comes from a Yuma word for "fighting-men" and Zuni for "enemy." The Apaches gained a great reputation for being a warlike tribe after continuous battles with other tribes and invaders from Mexico. However, Apaches are described as very gentle and faithful in their friendship.

At the present, Apaches live on reservations in Arizona and New Mexico.

Apache is the most widely used HTTP server on the internet. It is a powerful and flexible server, and supports the most recent Internet protocols including HTTP/1.1. It has a modular design that allows it to be customized to support things like Java servlets and PHP.

Apache started life as patches to the NCSA httpd web server informally shared by webmasters. In April 1995, the first full Apache server was released, and the rest, as they say, is history. The name Apache comes from these humble beginnings ("a patchy" server).

Apache is an open source project, meaning all the source code is available to the public. The license is similar to the BSD license, in that there are no restrictions against using Apache in a commercial, closed source, project.

The server runs on most operating systems, including Windows NT/2000, Windows 9x, OS/2, MacOS X, and most Unix variants. Apache has been coded with correctness and flexibility as goals rather than speed, so Apache is rarely the fastest web server for a platform, but it is rock solid and generally useful for the vast majority of situations.

Some of the most popular features of Apache are:

  • highly scalable DBM databases for authentication information.
  • content negotiation for supporting multiple versions of HTML and levels of standards compliance.
  • virtual hosting, or allowing one Apache server to serve content for multiple ip addresses or domain names.

Sources: Apache FAQ

Apache2 is now out. I wonder if it should be its own node, as it is so different.

Preliminary design on Apache2 began (IIRC) in 1997. Code writing began in 1999, and now we have reached stability, albeit with some warts and misfeatures, primarily the build system.

Apache 1.3.x was a very conservative design: it followed the ancient Unix idiom of 'fork to handle a request', with the additional feature of forking subprocesses in advance to spread the initialization load over time. The benefits to that approach are the simplicity of implementation, and assurances of stability as processes are being killed off and restarted all the time (so memory leaks can't get too far along before the whole process is collected). The disadvantages in the 1.3 design are lack of execution speed, high memory requirements, and no easy way to unify memory access between the multiple processes that comprise a single server.

Enter threads. Start-up and context switching time for threads is less than 1/4 of the time for processes. More importantly, threads operate within the same memory space, so 1, your memory costs are lower, and 2, you can do new things with shared memory spaces, for example:

  • database connection pooling: no nasty db connection startup times! Persistent, shareable handles for the life of your server (and only like 5-10 for the whole server, instead of 3-5 * N processes, so big memory savings.)
  • memoized functions: LISP-type languages frequently have a macro of some kind that "memoizes" a function, ie, saves the return value and returns it via the same syntax as calling the original function; useful with expensive function calls. This trick is a single application of the more general:
  • central caching. and all interpreters can read from it, so you only need one copy.
Of course, some things have to break. Namely, most of the mod_{perl/php/etc} interpreters. Their interpreters are not what we call thread-safe: they rely on a variety of global data structures for the operation of the interpreters, for example, let's say the list of function symbols in one perl namespace is a single list in C; the functions to access and modify this list presume that only the one interpreter is storing and accessing this list. Now imagine embedding this intepreter in a threaded application: multiple threads are vying for multiple interpreter states in the same process memory space; which means the multiple interpreters are tripping over each others changes. All the interpreter bookkeeping needs to be changed, the data needs to be scoped to a particular interpreter, so they can operate independently. There is another way to modify an interpreter, but it's hairy, so I'll leave it for now.

Right now I know of only 2 common languages that are ready for apache2: mod_tcl and mod_scheme. Python2.2 should be fine, since it's thread-safe in PyWX, but I haven't seen the release notes on that yet.

Oh yeah, there's a bunch of other fun stuff in apache2:

  • The old handler mechanism is toast; now every module can choose to 'handle' a request. It's risky, as two modules could munge the other's response, but you can have several modules doing several distinct things on a single request.
  • Everything and its mother is a filter. Every module can have its output filtered or can filter others. The module system is a big chain of filters, all modifying the data stream.
  • It's really fscking fast. Numbers to come.
  • the threaded runtime has been abstracted; so you can use a runtime targeted to the platform. This is a consequence of the APR growing into an independent delivery platform.
  • IP6
  • I18N
  • and a bunch of new modules.
More as my code develops.

A*pa"ches (#), n. pl.; sing. Apache (#). Ethnol.



© Webster 1913.

Log in or registerto write something here or to contact authors.