/[hydra]/hydra/docs/hydra.texi
ViewVC logotype

Contents of /hydra/docs/hydra.texi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Sun Oct 27 10:10:18 2002 UTC (21 years, 5 months ago) by nmav
Branch: MAIN
CVS Tags: hydra_0_1_6_without_hic, hydra_0_0_9, hydra_0_1_3, hydra_0_1_2, hydra_0_1_1, hydra_0_1_0, hydra_0_1_7, hydra_0_1_6, hydra_0_1_4, hydra_0_1_8, hydra_0_0_10, HEAD
Branch point for: hydra_0_1_0_patches
Changes since 1.2: +88 -85 lines
File MIME type: application/x-texinfo
*** empty log message ***

1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename hydra.info
4 @settitle The Hydra HTTP Daemon
5 @set UPDATED Last Updated: 2 Jan 2001
6 @set COPYPHRASE Copyright @copyright{} 1996-2001 Jon Nelson and Larry Doolittle
7 @set VERSION $Revision: 1.2 $
8
9 @paragraphindent asis
10 @iftex
11 @parindent 0pt
12 @end iftex
13 @c @setchapternewpage odd
14 @c %**end of header
15
16 @iftex
17 @titlepage
18 @title The Hydra HTTP Daemon
19 @c @sp 2
20 @end iftex
21
22 @ifinfo
23 This file documents Hydra, an HTTP daemon for UN*X like machines.
24 @end ifinfo
25
26 @html
27 <h1 align="center">The Hydra HTTP Daemon</h1>
28 @end html
29
30 @ifinfo
31 @dircategory Networking
32 @direntry
33 * Hydra: (hydra). The Hydra Webserver
34 @end direntry
35 @end ifinfo
36
37 @comment node-name, next, previous, up
38 @node Top, Introduction, , (dir)
39
40 Welcome to the documentation for Hydra, a high performance
41 HTTP Server for UN*X-alike computers, covered by the
42 @uref{Gnu_License,GNU General Public License}. This is a draft
43 document based on Boa documentation.
44 The on-line, updated copy of this documentation lives at
45 @uref{http://hydra.hellug.gr/,http://hydra.hellug.gr/}
46 @sp 1
47 @center @value{COPYPHRASE}
48 @center @value{UPDATED}, @value{VERSION}
49
50 @iftex
51 @end titlepage
52 @contents
53 @end iftex
54
55 @menu
56 * Introduction::
57 * Installation and Usage::
58 * Limits and Design Philosophy::
59 * Appendix::
60
61 -- Detailed Node Listing --
62
63 Installation
64
65 * Files Used by Hydra::
66 * Compile-Time and Command-Line Options::
67 * hydra.conf Directives::
68 * Security::
69
70 Limits and Design Philosophy
71
72 * Limits::
73 * Differences between Hydra and other web servers::
74 * Unexpected Behavior::
75
76 Appendix
77
78 * License::
79 * Acknowledgments::
80 * Reference Documents::
81 * Other HTTP Servers::
82 * Benchmarks::
83 * Tools::
84 * Authors::
85
86 @end menu
87
88 @comment node-name, next, previous, up
89 @node Introduction, Installation and Usage,top,top
90 @chapter Introduction
91
92 Hydra is a single-tasking HTTP server. That means that unlike
93 traditional web servers, it does not fork for each incoming
94 connection, nor does it fork many copies of itself to handle multiple
95 connections. It internally multiplexes all of the ongoing HTTP
96 connections, and forks only for CGI programs (which must be separate
97 processes), automatic directory generation, and automatic file
98 gunzipping. Preliminary tests show Hydra is capable of
99 handling several thousand hits per second on a 300 MHz Pentium and
100 dozens of hits per second on a lowly 20 MHz 386/SX.
101
102 The primary design goals of Hydra are speed and security. Security,
103 in the sense of @emph{can't be subverted by a malicious user,} not
104 @emph{fine grained access control and encrypted communications}.
105 Hydra is not intended as a feature-packed server; if you want one of those,
106 check out
107 WN (@uref{http://hopf.math.nwu.edu/}) from John Franks.
108 Modifications to Hydra that improve its speed, security, robustness, and
109 portability, are eagerly sought. Other features may be added if they
110 can be achieved without hurting the primary goals.
111
112 Hydra is based on Boa web server.
113 Boa was created in 1991 by Paul Phillips (@email{psp@@well.com}).
114 It is now being maintained and enhanced by Larry Doolittle
115 (@email{ldoolitt@@boa.org}) and Jon Nelson
116 (@email{jnelson@@boa.org}).
117 Please see the acknowledgement section for further
118 details. Hydra is maintained by
119 Nikos Mavroyanopoulos (@email{nmav@@gnutls.org}).
120
121
122 GNU/Linux is the development platform at the moment, other OS's are known to work.
123 If you'd like to contribute to this effort, contact Larry or Jon via e-mail.
124
125 @comment node-name, next, previous, up
126 @node Installation and Usage, Limits and Design Philosophy, Introduction,top
127 @chapter Installation and Usage
128
129 Hydra is currently being developed and tested on GNU/Linux/i386.
130 The code is straightforward (more so than most other servers),
131 so it should run easily on most modern Unix-alike platforms. Recent
132 versions of Hydra worked fine on FreeBSD, SunOS 4.1.4, GNU/Linux-SPARC,
133 and HP-UX 9.0. Pre-1.2.0 GNU/Linux kernels may not work because of
134 deficient mmap() implementations.
135
136 @menu
137 * Installation::
138 * Files Used by Hydra::
139 * Compile-Time and Command-Line Options::
140 * Security::
141 @end menu
142
143 @comment node-name, next, previous, up
144 @node Installation,Files Used by Hydra,,Installation and Usage
145 @section Installation
146
147 @enumerate
148 @item Unpack
149 @enumerate
150 @item Choose, and cd into, a convenient directory for the package.
151 @item @kbd{tar -xvzf hydra-x.y.z.tar.gz}, or for those of you with an archaic
152 (non-GNU) tar; @kbd{gzip -cd &lt; hydra-x.y.z.tar.gz | tar -xvf -}
153 @item Read the documentation. Really.
154 @end enumerate
155 @item Build
156 @enumerate
157 @item cd into the @t{src} directory.
158 @item (optional) Change the default SERVER_ROOT by setting the #define
159 at the top of src/defines.h
160 @item Type @kbd{./configure; make}
161 @item Report any errors to the maintainers for resolution, or strike
162 out on your own.
163 @end enumerate
164 @item Configure
165 @enumerate
166 @item Choose a user and server port under which Hydra can run. The
167 traditional port is 80, and user @t{nobody} (create if
168 you need to) is often a good selection for security purposes.
169 If you don't have (or choose not to use) root privileges, you
170 can not use port numbers less than 1024, nor can you switch user id.
171 @item Choose a server root. The @t{conf} directory within the
172 server root must hold your copy of the configuration file
173 @emph{hydra.conf}
174 @item Choose locations for log files, CGI programs (if any), and
175 the base of your URL tree.
176 @item Set the location of the @t{mime.types} file.
177 @item Edit @emph{conf/hydra.conf} according to your
178 choices above (this file documents itself). Read through this file
179 to see what other features you can configure.
180 @end enumerate
181 @item Start
182 @itemize
183 @item Start Hydra. If you didn't build the right SERVER_ROOT into the
184 binary, you can specify it on the command line with the -c option
185 (command line takes precedence).
186 @example
187 Example: ./hydra -c /usr/local/hydra
188 @end example
189 @end itemize
190
191 @item Test
192 @itemize
193 @item At this point the server should run and serve documents.
194 If not, check the error_log file for clues.
195 @end itemize
196
197 @item Install
198 @itemize
199 @item Copy the binary to a safe place, and put the invocation into
200 your system startup scripts. Use the same -c option you used
201 in your initial tests.
202 @end itemize
203 @end enumerate
204
205 @comment node-name, next, previous, up
206 @node Files Used by Hydra, Compile-Time and Command-Line Options, Installation,Installation and Usage
207 @section Files Used by Hydra
208
209 @ftable @file
210 @item hydra.conf
211 This file is the sole configuration file for Hydra. The directives in this
212 file are defined in the DIRECTIVES section.
213 @item mime.types
214 The MimeTypes <filename> defines what Content-Type Hydra will
215 send in an HTTP/1.0 or better transaction.
216 Set to /dev/null if you do not want to load a mime types file.
217 Do *not* comment out (better use AddType!)
218 @end ftable
219
220 @comment node-name, next, previous, up
221 @node Compile-Time and Command-Line Options, hydra.conf Directives, Files Used by Hydra,Installation and Usage
222 @section Compile-Time and Command-Line Options
223
224 @table @var
225 @item SERVER_ROOT
226 @itemx -c
227 The default server root as #defined by @var{SERVER_ROOT} in
228 @file{defines.h} can be overridden on the commandline using the
229 @option{-c} option. The server root must hold your local copy of the
230 configuration file @file{hydra.conf}.
231 @example
232 Example: /usr/sbin/hydra -c /etc/hydra
233 @end example
234
235 @end table
236
237 @comment node-name, next, previous, up
238 @node hydra.conf Directives, Security, Compile-Time and Command-Line Options, (top)
239 @section hydra.conf Directives
240
241 The Hydra configuration file is parsed with a lex/yacc or flex/bison
242 generated parser. If it reports an error, the line number will be
243 provided; it should be easy to spot. The syntax of each of these rules
244 is very simple, and they can occur in any order. Where possible, these
245 directives mimic those of NCSA httpd 1.3; I (Paul Phillips) saw no reason
246 to introduce gratuitous differences.
247
248 Note: the "ServerRoot" is not in this configuration file. It can be
249 compiled into the server (see @file{defines.h}) or specified on the command
250 line with the @command{-c} option.
251
252 The following directives are contained in the @file{hydra.conf} file, and most,
253 but not all, are required.
254
255 @table @option
256 @item Port <Integer>
257 This is the port that Hydra runs on. The default port for http servers is 80.
258 If it is less than 1024, the server must be started as root.
259
260 @item Listen <IP>
261 The Internet address to bind(2) to, in quadded-octet form (numbers).
262 If you leave it out, it binds to all addresses (INADDR_ANY).
263
264 The name you provide gets run through inet_aton(3), so you have to
265 use dotted quad notation. This configuration is too important to trust some DNS.
266
267 You only get one "Listen" directive, if you want service on multiple
268 IP addresses, you have three choices:
269
270 @enumerate
271 @item Run hydra without a "Listen" directive:
272 @itemize @bullet
273 @item All addresses are treated the same; makes sense if the addresses
274 are localhost, ppp, and eth0.
275 @item Use the VirtualHost directive below to point requests to different files.
276 Should be good for a very large number of addresses (web hosting clients).
277 @end itemize
278 @item Run one copy of hydra per IP address:
279 @itemize @bullet
280 @item Each instance has its own configuration with its own
281 "Listen" directive. No big deal up to a few tens of addresses. Nice separation
282 between clients.
283 @end itemize
284 @end enumerate
285
286 @item User <username or UID>
287 The name or UID the server should run as. For Hydra to attempt this, the
288 server must be started as root.
289
290 @item Group <groupname or GID>
291 The group name or GID the server should run as. For Hydra to attempt this,
292 the server must be started as root.
293
294 @item ServerAdmin <email address>
295 The email address where server problems should be sent. Note: this is not
296 currently used.
297
298 @item ErrorLog <filename>
299 The location of the error log file. If this does not start with /, it is
300 considered relative to the server root. Set to /dev/null if you don't want
301 errors logged.
302
303 @item AccessLog <filename>
304 The location of the access log file. If this does not start with /, it is
305 considered relative to the server root. Comment out or set to /dev/null
306 (less effective) to disable access logging.
307
308 @item VerboseCGILogs
309 This is a logical switch and does not take any parameters. Comment out to
310 disable. All it does is switch on or off logging of when CGIs are launched and when
311 the children return.
312
313 @item CgiLog <filename>
314 The location of the CGI error log file. If
315 specified, this is the file that the stderr of CGIs is tied to. Otherwise, writes
316 to stderr meet the bit bucket.
317
318 @item ServerName <server_name>
319 The name of this server that should be sent back to clients if different
320 than that returned by gethostname.
321
322 @item VirtualHost
323 This is a logical switch and does not take any parameters.
324 Comment out to disable. Given DocumentRoot /var/www, requests on interface `A' or
325 IP `IP-A' become /var/www/IP-A. Example: http://localhost/ becomes
326 /var/www/127.0.0.1
327
328 @item DocumentRoot <directory>
329 The root directory of the HTML documents. If this does not start with /,
330 it is considered relative to the server root.
331
332 @item UserDir <directory>
333 The name of the directory which is appended onto a user's home directory
334 if a ~user request is received.
335
336 @item DirectoryIndex <filename>
337 Name of the file to use as a pre-written HTML directory index. Please
338 make and use these files. On the fly creation of directory indexes
339 can be slow.
340
341 @item DirectoryMaker <full pathname to program>
342 Name of the program used
343 to generate on-the-fly directory listings. The program must take one or two
344 command-line arguments, the first being the directory to index (absolute), and the
345 second, which is optional, should be the "title" of the document be. Comment out if
346 you don't want on the fly directory listings. If this does not start with /, it is
347 considered relative to the server root.
348
349 @item DirectoryCache <directory>
350 DirectoryCache: If DirectoryIndex doesn't exist, and DirectoryMaker has been
351 commented out, the the on-the-fly indexing of Hydra can be used to generate indexes
352 of directories. Be warned that the output is extremely minimal and can cause
353 delays when slow disks are used. Note: The DirectoryCache must be writable by the
354 same user/group that Hydra runs as.
355
356 @item KeepAliveMax <integer>
357 Number of KeepAlive requests to allow per connection. Comment out, or set
358 to 0 to disable keepalive processing.
359
360 @item KeepAliveTimeout <integer>
361 Number of seconds to wait before keepalive connections time out.
362
363 @item MimeTypes <file>
364 The location of the mime.types file. If this does not start with /, it is
365 considered relative to the server root.
366 Comment out to avoid loading mime.types (better use AddType!)
367
368 @item DefaultType <mime type>
369 MIME type used if the file extension is unknown, or there is no file
370 extension.
371
372 @item AddType <mime type> <extension> extension...
373 Associates a MIME type
374 with an extension or extensions.
375
376 @item Redirect, Alias, and ScriptAlias
377 Redirect, Alias, and ScriptAlias all have the same semantics --
378 they match the beginning of a request and take appropriate action.
379 Use Redirect for other servers, Alias for the same server, and
380 ScriptAlias to enable directories for script execution.
381
382 @item Redirect <path1> <path2>
383 allows you to tell clients about documents which used to exist
384 in your server's namespace, but do not anymore. This allows you
385 tell the clients where to look for the relocated document.
386
387 @item Alias <path1> <path2>
388 aliases one path to another. Of course, symbolic links in the
389 file system work fine too.
390
391 @item ScriptAlias <path1> <path2>
392 maps a virtual path to a directory for serving scripts.
393
394 @item Allow, Deny
395 Only supported if Hydra is compiled with --enable-access-control.
396 Allow and Deny allows pattern based access control using shell
397 wildcards. The string the matching is performed on is the absolute
398 filesystem filename. The Allow, Deny directives are processed in
399 order until the first match is found, so to allow files containing
400 the substring 123 but not the ones containing 1234 you would do:
401 @itemize @bullet
402 @item Deny *1234*
403 @item Allow *123*
404 @end itemize
405
406 @item Allow <pattern>
407 Allows files matching <pattern>
408
409 @item Deny <pattern>
410 Disallowes files matching <pattern>
411
412 @end table
413
414 @comment node-name, next, previous, up
415 @node Security, , hydra.conf Directives, Installation and Usage
416 @section Security
417
418 Hydra has been designed to use the existing file system security. In
419 @file{hydra.conf}, the directives @emph{user} and
420 @emph{group} determine who Hydra will run as, if launched by root.
421 By default, the user/group is nobody/nogroup. This allows quite a bit
422 of flexibility. For example, if you want to disallow access to otherwise
423 accessible directories or files, simply make them inaccessible to
424 nobody/nogroup. If the user that Hydra runs as is "hydra" and the groups that
425 "hydra" belongs to include "web-stuff" then files/directories accessible
426 by users with group "web-stuff" will also be accessible to Hydra.
427
428 The February 2000 hoo-rah from
429 @uref{http://www.cert.org/advisories/CA-2000-02.html,CERT advisory CA-2000-02}
430 has little to do with Hydra. As of version 0.94.4, Hydra's escaping rules have
431 been cleaned up a little, but they weren't that bad before. The example CGI
432 programs have been updated to show what effort is needed there. If you
433 write, maintain, or use CGI programs under Hydra (or any other server) it's
434 worth your while to read and understand this advisory. The real problem,
435 however, boils down to browser and web page designers emphasizing frills
436 over content and security. The market leading browsers assume (incorrectly)
437 that all web pages are trustworthy.
438
439 @comment node-name, next, previous, up
440 @node Limits and Design Philosophy,Appendix, Installation and Usage,top
441 @chapter Limits and Design Philosophy
442
443 There are many issues that become more difficult to resolve in a single
444 tasking web server than in the normal forking model. Here is a partial
445 list -- there are probably others that haven't been encountered yet.
446
447 @menu
448 * Limits::
449 * Differences between Hydra and other web servers::
450 * Unexpected Behavior::
451 @end menu
452
453 @comment node-name, next, previous, up
454 @node Limits,Differences between Hydra and other web servers,,Limits and Design Philosophy
455 @section Limits
456
457 @itemize @bullet
458 @item Slow file systems
459
460 The file systems being served should be much faster than the
461 network connection to the HTTP requests, or performance will suffer.
462 For instance, if a document is served from a CD-ROM, the whole server
463 (including all other currently incomplete data transfers) will stall
464 while the CD-ROM spins up. This is a consequence of the fact that Hydra
465 mmap()'s each file being served, and lets the kernel read and cache
466 pages as best it knows how. When the files come from a local disk
467 (the faster the better), this is no problem, and in fact delivers
468 nearly ideal performance under heavy load. Avoid serving documents
469 from NFS and CD-ROM unless you have even slower inbound net
470 connections (e.g., POTS SLIP).
471
472 @item DNS lookups
473
474 Writing a nonblocking gethostbyaddr is a difficult and not very
475 enjoyable task. Paul Phillips experimented with several methods,
476 including a separate logging process, before removing hostname
477 lookups entirely. There is a companion program with Hydra
478 @file{util/resolver.pl} that will postprocess the logfiles and
479 replace IP addresses with hostnames, which is much faster no matter
480 what sort of server you run.
481
482 @item Identd lookups
483
484 Same difficulties as hostname lookups; not included.
485 Hydra provides a REMOTE_PORT environment variable, in addition
486 to REMOTE_ADDR, so that a CGI program can do its own ident.
487 See the end of @t{examples/cgi-test.cgi}.
488
489 @item Password file lookups via NIS
490
491 If users are allowed to serve HTML from their home directories,
492 password file lookups can potentially block the process. To lessen
493 the impact, each user's home directory is cached by Hydra so it need
494 only be looked up once.
495
496 @item Running out of file descriptors
497
498 Since a file descriptor is needed for every ongoing connection
499 (two for non-nph CGIs, directories, and automatic gunzipping of files),
500 it is possible though highly improbable to run out of file
501 descriptors. The symptoms of this conditions may vary with
502 your particular unix variant, but you will probably see log
503 entries giving an error message for @t{accept}.
504 Try to build your kernel to give an adequate number for
505 your usage - GNU/Linux provides 256 out of the box, more than
506 enough for most people.
507 @end itemize
508
509 @comment node-name, next, previous, up
510 @node Differences between Hydra and other web servers,Unexpected Behavior,Limits,Limits and Design Philosophy
511 @section Differences between Hydra and other web servers
512
513 In the pursuit of speed and simplicity, some aspects of Hydra differ
514 from the popular web servers. In no particular order:
515
516 @itemize @bullet
517 @item @var{REMOTE_HOST} environment variable not set for CGI programs
518
519 The @var{REMOTE_HOST} environment variable is not set for CGI programs,
520 for reasons already described. This is easily worked around because the
521 IP address is provided in the @var{REMOTE_HOST} variable, so (if the CGI
522 program actually cares) gethostbyaddr or a variant can be used.
523
524 @item There are no server side includes (@acronym{SSI}) in Hydra
525
526 We don't like them, and they are too slow to parse. We will consider
527 more efficient alternatives.
528
529 @item There are no access control features
530
531 Hydra will follow symbolic links, and serve any file that it can
532 read. The expectation is that you will configure Hydra to run as user
533 "nobody", and only files configured world readable will come
534 out.
535
536 @item No chroot option
537
538 There is no option to run chrooted. If anybody wants this, and is
539 willing to try out experimental code, contact the maintainers.
540 @end itemize
541
542 @comment node-name, next, previous, up
543 @node Unexpected Behavior,,Differences between Hydra and other web servers,Limits and Design Philosophy
544 @section Unexpected Behavior
545
546 @itemize @bullet
547 @item SIGHUP handling
548
549 Like any good server, Hydra traps SIGHUP and rereads @file{hydra.conf}.
550 However, under normal circumstances, it has already given away
551 permissions, so many items listed in @file{hydra.conf} can not take effect.
552 No attempt is made to change uid, gid, log files, or server port.
553 All other configuration changes should take place smoothly.
554
555 @item SIGUSR1 handling
556
557 Hydra traps SIGUSR1 and prints useful statistics in the error log file.
558
559 @item Relative URL handling
560
561 Not all browsers handle relative URLs correctly. Hydra will not
562 cover up for this browser bug, and will typically report 404 Not Found
563 for URL's containing odd combinations of "../" 's.
564
565 Note: As of version 0.95.0 (unreleased) the URL parser has been
566 rewritten and *does* correctly handle relative URLs.
567 @end itemize
568
569 @comment node-name, next, previous, up
570 @node Appendix,,Limits and Design Philosophy,top
571 @appendix Appendix
572
573 @menu
574 * License::
575 * Acknowledgments::
576 * Reference Documents::
577 * Other HTTP Servers::
578 * Benchmarks::
579 * Tools::
580 * Authors::
581 @end menu
582
583 @comment node-name, next, previous, up
584 @node License,Acknowledgments,,Appendix
585 @section License
586
587 This program is distributed under the
588 @uref{http://www.gnu.org/copyleft/gpl.html,GNU General Public License}.
589 as noted in each source file:
590 @*
591
592 @smallexample
593 /*
594 * Hydra, an http server
595 * Copyright (C) 1995 Paul Phillips <psp@@well.com>
596 *
597 * This program is free software; you can redistribute it and/or modify
598 * it under the terms of the GNU General Public License as published by
599 * the Free Software Foundation; either version 1, or (at your option)
600 * any later version.
601 *
602 * This program is distributed in the hope that it will be useful,
603 * but WITHOUT ANY WARRANTY; without even the implied warranty of
604 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
605 * GNU General Public License for more details.
606 *
607 * You should have received a copy of the GNU General Public License
608 * along with this program; if not, write to the Free Software
609 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
610 *
611 */
612
613 @end smallexample
614
615 @comment node-name, next, previous, up
616 @node Acknowledgments,Reference Documents,License,Appendix
617 @section Acknowledgments
618
619 Paul Phillips wrote the first versions of Hydra, up to and including
620 version 0.91. Version 0.92 of Hydra was officially released December 1996
621 by Larry Doolittle. Version 0.93 was the development version of 0.94,
622 which was released in February 2000.
623
624 The Boa Webserver is currently (Feb 2000) maintained and enhanced by
625 Larry Doolittle (@email{ldoolitt@@boa.org})
626 and Jon Nelson (@email{jnelson@@boa.org}).
627
628 We would like to thank Russ Nelson (@email{nelson@@crynwr.com})
629 for hosting the @uref{http://www.boa.org,web site}.
630
631 We would also like to thank Paul Philips for writing code that is
632 worth maintaining and supporting.
633
634 Many people have contributed to Hydra, including (but not
635 limited to) Charles F. Randall (@email{randall@@goldsys.com})
636 Christoph Lameter (@email{<chris@@waterf.org>}),
637 Russ Nelson (@email{<nelson@@crynwr.com>}), Alain Magloire
638 (@email{<alain.magloire@@rcsm.ee.mcgill.ca>}),
639 and more recently, M. Drew Streib (@email{<dtype@@linux.com>}).
640
641 Paul Phillips records his acknowledgments as follows:
642 @quotation
643 Thanks to everyone in the WWW community, in general a great bunch of people.
644 Special thanks to Clem Taylor (@email{<ctaylor@@eecis.udel.edu>}), who
645 provided invaluable feedback on many of my ideas, and offered good
646 ones of his own. Also thanks to John Franks, author of wn, for
647 writing what I believe is the best webserver out there.
648 @end quotation
649
650 @comment node-name, next, previous, up
651 @node Reference Documents,Other HTTP Servers,Acknowledgments,Appendix
652 @section Reference Documents
653
654 Links to documents relevant to
655 @uref{http://hydra.hellug.gr/,Hydra}
656 development and usage. Incomplete, we're still working on this.
657 NCSA has a decent
658 @uref{http://hoohoo.ncsa.uiuc.edu/docs/Library.html,page} along
659 these lines, too.
660
661 Also see Yahoo's List
662 @* @uref{http://www.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/}
663
664 @itemize
665 @item W3O HTTP page
666 @* @uref{http://www.w3.org/pub/WWW/Protocols/}
667
668 @item RFC 1945 HTTP-1.0 (informational)
669 @* @uref{http://ds.internic.net/rfc/rfc1945.txt}
670
671 @item IETF Working Group Draft 07 of HTTP-1.1
672 @* @uref{http://www.w3.org/pub/WWW/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-07.txt}
673
674 @item HTTP: A protocol for networked information
675 @* @uref{http://www.w3.org/pub/WWW/Protocols/HTTP/HTTP2.html}
676
677 @item The Common Gateway Interface (CGI)
678 @* @uref{http://hoohoo.ncsa.uiuc.edu/cgi/overview.html}
679
680 @item RFC 1738 URL syntax and semantics
681 @* @uref{http://ds.internic.net/rfc/rfc1738.txt}
682
683 @item RFC 1808 Relative URL syntax and semantics
684 @* @uref{http://ds.internic.net/rfc/rfc1808.txt}
685 @end itemize
686
687 @comment node-name, next, previous, up
688 @node Other HTTP Servers,Benchmarks,Reference Documents,Appendix
689 @section Other HTTP Servers
690
691 For unix-alike platforms, with published source code.
692
693 @itemize
694 @item tiny/turbo/throttling httpd very similar to Hydra, with a throttling
695 feature
696 @* @uref{http://www.acme.com/software/thttpd/}
697
698 @item Roxen: based on ulpc interpreter, non-forking (interpreter implements
699 threading), GPL'd
700 @* @uref{http://www.roxen.com/}
701
702 @item WN: featureful, GPL'd
703 @* @uref{http://hopf.math.nwu.edu/}
704
705 @item Apache: fast, PD
706 @* @uref{http://www.apache.org/}
707
708 @item NCSA: standard, legal status?
709 @* @uref{http://hoohoo.ncsa.uiuc.edu/}
710
711 @item CERN: standard, PD, supports proxy
712 @* @uref{http://www.w3.org/pub/WWW/Daemon/Status.html}
713
714 @item xs-httpd 2.0: small, fast, pseudo-GPL'd
715 @* @uref{http://www.stack.nl/~sven/xs-httpd/}
716
717 @item bozohttpd.tar.gz sources, in perl
718 @* @uref{ftp://ftp.eterna.com.au/bozo/bsf/attware/bozohttpd.tar.gz}
719
720 @item Squid is actually an "Internet Object Cache"
721 @* @uref{http://squid.nlanr.net/Squid/}
722 @end itemize
723
724 Also worth mentioning is Zeus.
725 It is commercial, with a free demo, so it doesn't belong on the list above.
726 Zeus seems to be based on technology similar to Hydra and thttpd,
727 but with more bells and whistles.
728 @* @uref{http://www.zeus.co.uk/products/server/}
729
730 @comment node-name, next, previous, up
731 @node Benchmarks,Tools,Other HTTP Servers,Appendix
732 @section Benchmarks
733
734 @itemize
735 @item ZeusBench (broken link)
736 @* @uref{http://www.zeus.co.uk/products/server/intro/bench2/zeusbench.shtml}
737
738 @item WebBench (binary-ware)
739 @* @uref{http://web1.zdnet.com/zdbop/webbench/webbench.html}
740
741 @item WebStone
742 @* @uref{http://www.mindcraft.com/benchmarks/webstone/}
743
744 @item SpecWeb96
745 @* @uref{http://www.specbench.org/osg/web96/}
746 @end itemize
747
748 @comment node-name, next, previous, up
749 @node Tools,Authors,Benchmarks,Appendix
750 @section Tools
751
752 @itemize
753 @item Analog logfile analyzer
754 @* @uref{http://www.statslab.cam.ac.uk/@~sret1/analog/}
755
756 @item wwwstat logfile analyzer
757 @* @uref{http://www.ics.uci.edu/pub/websoft/wwwstat/}
758
759 @item gwstat wwwstat postprocessor
760 @* @uref{http://dis.cs.umass.edu/stats/gwstat.html}
761
762 @item The Webalizer logfile analyzer
763 @* @uref{http://www.usagl.net/webalizer/}
764
765 @item cgiwrap
766 @* @uref{http://www.umr.edu/@~cgiwrap/}
767
768 @item suEXEC (Hydra would need to be ..umm.. "adjusted" to support this)
769 @* @uref{http://www.apache.org/docs/suexec.html}
770 @end itemize
771
772 Note: References last checked: 06 October 1997
773
774 @comment node-name, next, previous, up
775 @node Authors,,Tools,Appendix
776 @section Authors
777
778 @itemize
779 @item Conversion from linuxdoc SGML to texinfo by Jon Nelson
780 @item Conversion to linuxdoc SGML by Jon Nelson
781 @item Original HTML documentation by Larry Doolittle
782 @item @value{COPYPHRASE}
783 @end itemize
784
785 @c variable
786 @c @printindex vr
787 @c concept
788 @c @printindex cp
789 @c function
790 @c @printindex fn
791 @c key
792 @c @printindex ky
793 @c program
794 @c @printindex pg
795 @c data type
796 @c @printindex tp
797
798 @bye

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26