Newer
Older
12001
12002
12003
12004
12005
12006
12007
12008
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12023
12024
12025
12026
12027
12028
12029
12030
12031
12032
12033
12034
12035
12036
12037
12038
12039
12040
12041
12042
12043
12044
12045
12046
12047
12048
12049
12050
12051
12052
12053
12054
12055
12056
12057
12058
12059
12060
12061
12062
12063
12064
12065
12066
12067
12068
12069
12070
12071
12072
12073
12074
12075
12076
12077
12078
12079
12080
12081
12082
12083
12084
12085
12086
12087
12088
12089
12090
12091
12092
12093
12094
12095
12096
12097
12098
12099
12100
12101
12102
12103
12104
12105
12106
12107
12108
12109
12110
12111
12112
12113
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
12125
12126
12127
12128
12129
12130
12131
12132
12133
12134
12135
12136
12137
12138
12139
12140
12141
12142
12143
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177
12178
12179
12180
12181
12182
12183
12184
12185
12186
12187
12188
12189
12190
12191
12192
12193
12194
12195
12196
12197
12198
12199
12200
12201
12202
12203
12204
12205
12206
12207
12208
12209
12210
12211
12212
12213
12214
12215
12216
12217
12218
12219
12220
12221
12222
12223
12224
12225
12226
12227
12228
12229
12230
12231
12232
12233
12234
12235
12236
12237
12238
12239
12240
12241
12242
12243
12244
12245
12246
12247
12248
12249
12250
12251
12252
12253
12254
12255
12256
12257
12258
12259
12260
12261
12262
12263
12264
12265
12266
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
12278
12279
12280
12281
12282
12283
12284
12285
12286
12287
12288
12289
12290
12291
12292
12293
12294
12295
12296
12297
12298
12299
12300
12301
12302
12303
12304
12305
12306
12307
12308
12309
12310
12311
12312
12313
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
12324
12325
12326
12327
12328
12329
12330
12331
12332
12333
12334
12335
12336
12337
12338
12339
12340
12341
12342
12343
Before asking for a new connection, each server process checks
the number of other servers which are also waiting for a
connection. If there are more than MaxServers, it quietly dies
off. Conversely, every second, the root, or caretaker, process
looks to see how many servers are waiting for a new connection;
if there are fewer than StartServers, it starts a new one. This
does not depend on the number of server processes already extant.
The accounting is arranged through a "scoreboard" file, named
/tmp/htstatus.*, on which each process has an independent file
descriptor (they need to seek without interference).
The end effect is that MaxServers is the maximum number of
servers on an *inactive* server machine, but more will be forked
off to handle unusually heavy loads (or unusually slow clients);
these will die off when they are no longer needed --- without
reverting to the overhead of full forking operation. There is a
hard maximum of 150 server processes compiled in, largely to
avoid forking out of control and dragging the machine down.
(This is arguably too high).
In my server endurance tests, this mechanism did not appear to
impose any significant overhead, even after I forced it to put the
scoreboard file on a normal filesystem (which might have more
overhead than tmpfs). [Robert Thau]
*) Set HTTP_FOO variables for SSI <!--#exec cmd-->s, not just CGI scripts.
[Cliff Skolnick]
*) Read .htaccess files even in directory with <Directory> section.
(Former incompatibility noted on mailing list, now fixed). [Robert
Thau]
*) "HEAD /" gives the client a "Bad Request" error message, rather
than trying to send no body *and* no headers. [Cliff Skolnick].
*) Don't produce double error reports for some very obscure cases
mainly involving auth configuration (the "all modules decline to
handle" case which is a sure sign of a server bug in most cases,
but also happens when authentication is badly misconfigured).
[Robert Thau]
*) Moved FCNTL_SERIALIZED_ACCEPT defines into conf.h (that's what
it's *for*, and this sort of thing really shouldn't be cluttering
up the Makefile). [Robert Thau]
*) Incidental code cleanups in http_main.c --- stop dragging
sa_client around; just declare it where used. [Robert Thau]
*) Another acc-related fix. (It doesn't like const char
in some places...). [Mark Cox]
Changes with Shambhala 0.6.1 13 Jul 1995
*) Fixed auth_name-related typos in http_core.c [Brian Behlendorf]
Also, fixed auth typo in http_protocol.c unmasked by this fix.
*) Compiles clean with acc on SunOS [Paul Sutton]
*) Reordered modules in modules.c so that Redirect takes priority
over ScriptAlias, for NCSA bug-compatibility [Rob Hartill] ---
believe it or not, he has an actual site with a ScriptAlias and
a Redirect declared for the *exact same directory*. Even *my*
compatibility fetish wouldn't motivate me to fix this if the fix
required any effort, but it doesn't, so what the hey.
*) Fixed to properly default several server_rec fields for virtual
servers from the corresponding fields in the main server_rec.
[Cliff Skolnick --- 'port' was a particular irritant].
*) No longer kills off nph- child processes before they are
finished sending output. [Matthew Gray]
Changes with Shambhala 0.6.0 10 Jul 1995
*) Two styles of timeout --- hard and soft. soft_timeout()s just put
the connection to the client in an "aborted" state, but otherwise
allow whatever handlers are running to clean up. hard_timeout()s
abort the request in progress completely; anything not tied to some
resource pool cleanup will leak. They're still around because I
haven't yet come up with a more elegant way of handling
timeouts when talking to something that isn't the client. The
default_handler and the dir_handler now use soft timeouts, largely
so I can test the feature. [Robert Thau]
*) TransferLog "| my_postprocessor ..." seems to be there. Note that
the case of log handlers dying prematurely is probably handled VERY
gracelessly at this point, and if the logger stops reading input,
the server will hang. (It is known to correctly restart the
logging process on server restart; this is (should be!) going through
the same SIGTERM/pause/SIGKILL routine used to ding an errant CGI
script). [Robert Thau]
*) asis files supported (new module). [Robert Thau]
*) IdentityCheck code is compiled in, but has not been tested. (I
don't know anyone who runs identd). [Robert Thau]
*) PATH_INFO and PATH_TRANSLATED are not set unless some real PATH_INFO
came in with the request, for NCSA bug-compatibility. [Robert Thau]
*) Don't leak the DIR * on HEAD request for a directory. [Robert Thau]
*) Deleted the block_alarms() stuff from dbm_auth; no longer necessary,
as timeouts are not in scope. [Robert Thau]
*) quoted-string args in config files now handled correctly (doesn't drop
the last character). [Robert Thau; reported by Randy Terbush]
*) Fixed silly typo in http_main.c which was suddenly fatal in HP-UX.
How the hell did it ever work? [Robert Thau; reported by Rob Hartill]
*) mod_core.c --- default_type returns DEFAULT_TYPE (the compile-time
default default type); the former default default behavior when all
type-checkers defaulted had been a core dump. [Paul Sutton]
*) Copy filenames out of the struct dirent when indexing
directories. (On Linux, readdir() returns a pointer to the same
memory area every time). Fix is in mod_dir.c. [Paul Sutton]
Changes with Shambhala 0.5.3 [not released]
*) Default response handler notes "file not found" in the error log,
if the file was not found. [Cliff Skolnick].
*) Another Cliff bug --- "GET /~user" now properly redirects (the userdir
code no longer sets up bogus PATH_INFO which fakes out the directory
handler). [Cliff Skolnick]
Changes with Shambhala 0.5.2 06 Jul 1995
*) Changes to http_main.c --- root server no longer plays silly
games with SIGCHLD, and so now detects and replaces dying
children. Child processes just die on SIGTERM, without taking
the whole process group with them. Potential problem --- if any
child process refuses to die, we hang in restart.
MaxRequestsPerChild may still not work, but it certainly works
better than it did before this! [Robert Thau]
*) mod_dir.c bug fixes: ReadmeName and HeaderName
work (or work better, at least); over-long description lines
properly terminated. [Mark Cox]
*) http_request.c now calls unescape_url() more places where it
should [Paul Sutton].
*) More directory handling bugs (reported by Cox)
Parent Directory link is now set correctly. [Robert Thau]
Changes with Shambhala 0.5.1 04 Jul 1995
*) Generalized cleanup interface in alloc.c --- any function can be
registered with alloc.c as a cleanup for a resource pool;
tracking of files and file descriptors has been reimplemented in
terms of this interface, so I can give it some sort of a test.
[Robert Thau]
*) More changes in alloc.c --- new cleanup_for_exec() function,
which tracks down and closes all file descriptors which have been
registered with the alloc.c machinery before the server exec()s a
child process for CGI or <!--#exec-->. CGI children now get
started with exactly three file descriptors open. Hopefully,
this cures the problem Rob H. was having with overly persistent
CGI connections. [Robert Thau]
*) Mutual exclusion around the accept() in child_main() --- this is
required on at least SGI, Solaris and Linux, and is #ifdef'ed in
by default on those systems only (-DFCNTL_SERIALIZED_ACCEPT).
This uses fcntl(F_SETLK,...) on the error log descriptor because
flock() on that descriptor won't work on systems which have BSD
flock() semantics, including (I think) Linux 1.3 and Solaris.
This does work on SunOS (when the server is idle, only one
process in the pool is waiting on accept()); it *ought* to work
on the other systems. [Robert Thau]
*) FreeBSD and BSDI portability tweaks [Chuck Murcko]
*) sizeof(*sa_client) bugfix from [Rob Hartill]
*) pstrdup(..., NULL) returns NULL, [Randy Terbush]
*) block_alarms() to avoid leaking the DBM* in dbm auth (this should
be unnecessary if I go to the revised timeout-handling scheme).
[Robert Thau]
*) For NCSA bug-compatibility, set QUERY_STRING env var (to a null
string) even if none came in with the request. [Robert Thau]
*) CHANGES file added to distribution ;-).
Changes with Shambhala 0.4.5
*) mod_dld --- early dynamic loading support [rst]
*) Add wildcard content handlers for XBITHACK; default_hander now
invoked with that mechanism (as a handler hanging off mod_core) [rst]
*) XBITHACK supported as a wildcard content-handler, and
configurable at run-time (not just at compile time, as in the
"patchy server" releases) [rst]
Changes with Shambhala 0.4.4 30 Jun 1995
*) Fixed basic thinkos in mod_dbm_auth.c [rst, reported by Mark Cox]
*) Handle Addtype x/y .z [rst, reported by Cox]
Changes with Shambhala 0.4.3
*) Fixed very dumb bug in mod_alias; "Alias" and "Redirect" are not
synonymous [rst, terbush]
Changes with Shambhala 0.4.1 28 Jun 1995
*) First-cut virtual host implementation; some refit in the config
reading code, and log management, was necessary to support this [rst]
*) Sub-pool machinery, originally added to avoid excessive storage
allocation on listings of large directories (which turned out to
be the problem that the 0.3 storage accounting was added to
find). Subrequests and mod_dir changed to use subpools. [rst]
*) More memory debugging --- free list consistency checks. [rst]
*) Added err_headers to request_rec, with support elsewhere [rst]
*) Other fixes to minor bugs in mod_dir and mod_includes [rst, terbush]
Changes with Shambhala 0.3 19 Jun 1995
*) Switch ONE_PROCESS to a runtime command-line option (-X)
*) Don't compile in mod_ai_backcompat by default
*) Switch name of server from Apache to Shambhala in Makefile
*) Add some accounting routines to track memory usage in the pools,
for debugging
Changes with Shambhala 0.2
*) Set DOCUMENT_ROOT CGI variable
*) Add single-process debugging, as a compile-time option (ONE_PROCESS)
*) Add critical section protection to handling of cleanup structures
in alloc.c [rst]
*) Significant code reorg within the server core to group related
functions together [rst]
*) Correctly handle clients that hang up before sending any request
[rst]
*) Replace dying child processes. [rst]
Changes with Shambhala 0.1 12 Jun 1995
Major rewrite of the pre-existing "patchy server" codebase, by
Robert Thau (rst). Significant portions of the server code, such
as configuration-file handling and HTTP authentication support,
were ripped out and rewritten from scratch. Code that was not
completely rewritten was significantly altered.
Major changes with this release include:
*) Introduction of the module API; in request handling, the central
machinery just dispatches to various modules, which actually do
most of the work. Configuration handling is similar --- modules
declare their own commands, and the central machinery just
dispatches to them.
API features from shambhala/0.1 were substantially unchanged in
Apache 1.0 and 1.1. (1.0 API features not yet present in this
release, such as wildcard handlers and subpools, were added in
subsequent Shambhala releases, and were also generally rst's
work).
*) This release included the following modules:
mod_access (access control --- allow and deny directives),
mod_alias (Alias and Redirect commands),
mod_auth (straight HTTP authentication, based on flat-files)
mod_auth_dbm (same, with dbm files)
mod_cgi (CGI scripts and, in this release, ScriptAlias)
mod_common_log (CLF access logs; later renamed mod_log_common)
mod_dir (directory indexing)
mod_include (server-side includes)
mod_mime (AddType directives)
mod_negotiation (content negotiation)
mod_userdir (support for users' public_html directories)
It also included a mod_ai_backcompat, which was a private hack
for back-compatibility with rst's own AI-lab servers.
All of these modules were substantially complete, and functional
or nearly so (a few, which implemented features not in use at
Thau's site, required patches of a few lines).
*) sub-request machinery, to allow modules to determine how other
modules would assign MIME types to a given file, or optionally
serve its content (this is heavily used by mod_dir, mod_include
and mod_negotiation).
*) Resource pool system for keeping track of memory allocated and
files opened in service of a particular request. Much of the
code in the modules (when they weren't rewrites) was adjusted to
replace a pervasive convention of using fixed-size buffers on
the stack with an equally pervasive convention of using memory
allocated with palloc().
*) Reorganization of data structures associated with a given
request to eliminate use of global variables and the troublesome
unmunge_name function (used in NCSA and early Apache releases to
attempt to determine the URI which mapped to a given filename
--- a difficult proposition, given that it is easy to produce
setups in which multiple URIs map to the same file).
*) Source files renamed and rearranged
*) Very simple pre-forking behavior --- parent process forked off a
fixed number of children, and then just waited for SIGHUP.
*) Other more minor changes too numerous to list.
This release included modified versions of a lot of code from the
Apache 0.6.4 public release, plus an early pre-forking patch
codeveloped by Robert Thau and Rob Hartill.
Changes with Apache 0.7.3 20 Jun 1995
*) There were a bunch of changes between Apache 0.6.4 and 0.7.3 that
were incorporated by Rob Hartill on the main branch while Robert Thau
worked on the Shambhala rewrite above. Most were merged into the
Shambala architecture after Apache 0.8.0.
Changes with Apache 0.6.4 13 May 1995
*) Patches by Rob Hartill, Cliff Skolnick, Randy Terbush, Robert Thau,
and others.
Changes with Apache 0.5.1 10 Apr 1995
Changes with Apache 0.4 02 Apr 1995
*) Patches by Brian Behlendorf, Andrew Wilson, Robert Thau,
and Rob Hartill.
Changes with Apache 0.3 24 Mar 1995
*) Patches by Robert Thau, David Robinson, Rob Hartill, and
Carlos Varela.
Changes with Apache 0.2 18 Mar 1995
*) Based on NCSA httpd 1.3 by Rob McCool and patches by CERT,
Roy Fielding, Robert Thau, Nicolas Pioch, David Robinson,
Brian Behlendorf, Rob Hartill, and Cliff Skolnick.