1 |
\input texinfo @c -*-texinfo-*- |
\input texinfo @c -*-texinfo-*- |
2 |
@c %**start of header |
@c %**start of header |
3 |
@setfilename boa.info |
@setfilename hydra.info |
4 |
@settitle The Boa HTTP Daemon |
@settitle The Hydra HTTP Daemon |
5 |
@set UPDATED Last Updated: 2 Jan 2001 |
@set UPDATED Last Updated: 2 Jan 2001 |
6 |
@set COPYPHRASE Copyright @copyright{} 1996-2001 Jon Nelson and Larry Doolittle |
@set COPYPHRASE Copyright @copyright{} 1996-2001 Jon Nelson and Larry Doolittle |
7 |
@set VERSION $Revision$ |
@set VERSION $Revision$ |
15 |
|
|
16 |
@iftex |
@iftex |
17 |
@titlepage |
@titlepage |
18 |
@title The Boa HTTP Daemon |
@title The Hydra HTTP Daemon |
19 |
@c @sp 2 |
@c @sp 2 |
20 |
@end iftex |
@end iftex |
21 |
|
|
22 |
@ifinfo |
@ifinfo |
23 |
This file documents Boa, an HTTP daemon for UN*X like machines. |
This file documents Hydra, an HTTP daemon for UN*X like machines. |
24 |
@end ifinfo |
@end ifinfo |
25 |
|
|
26 |
@html |
@html |
27 |
<h1 align="center">The Boa HTTP Daemon</h1> |
<h1 align="center">The Hydra HTTP Daemon</h1> |
|
<center><img src="boa_banner.png"></center> |
|
28 |
@end html |
@end html |
29 |
|
|
30 |
@ifinfo |
@ifinfo |
31 |
@dircategory Networking |
@dircategory Networking |
32 |
@direntry |
@direntry |
33 |
* Boa: (boa). The Boa Webserver |
* Hydra: (hydra). The Hydra Webserver |
34 |
@end direntry |
@end direntry |
35 |
@end ifinfo |
@end ifinfo |
36 |
|
|
37 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
38 |
@node Top, Introduction, , (dir) |
@node Top, Introduction, , (dir) |
39 |
|
|
40 |
Welcome to the documentation for Boa, a high performance |
Welcome to the documentation for Hydra, a high performance |
41 |
HTTP Server for UN*X-alike computers, covered by the |
HTTP Server for UN*X-alike computers, covered by the |
42 |
@uref{Gnu_License,GNU General Public License}. |
@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 |
The on-line, updated copy of this documentation lives at |
45 |
@uref{http://www.boa.org/,http://www.boa.org/} |
@uref{http://hydra.hellug.gr/,http://hydra.hellug.gr/} |
46 |
@sp 1 |
@sp 1 |
47 |
@center @value{COPYPHRASE} |
@center @value{COPYPHRASE} |
48 |
@center @value{UPDATED}, @value{VERSION} |
@center @value{UPDATED}, @value{VERSION} |
62 |
|
|
63 |
Installation |
Installation |
64 |
|
|
65 |
* Files Used by Boa:: |
* Files Used by Hydra:: |
66 |
* Compile-Time and Command-Line Options:: |
* Compile-Time and Command-Line Options:: |
67 |
* boa.conf Directives:: |
* hydra.conf Directives:: |
68 |
* Security:: |
* Security:: |
69 |
|
|
70 |
Limits and Design Philosophy |
Limits and Design Philosophy |
71 |
|
|
72 |
* Limits:: |
* Limits:: |
73 |
* Differences between Boa and other web servers:: |
* Differences between Hydra and other web servers:: |
74 |
* Unexpected Behavior:: |
* Unexpected Behavior:: |
75 |
|
|
76 |
Appendix |
Appendix |
89 |
@node Introduction, Installation and Usage,top,top |
@node Introduction, Installation and Usage,top,top |
90 |
@chapter Introduction |
@chapter Introduction |
91 |
|
|
92 |
Boa is a single-tasking HTTP server. That means that unlike |
Hydra is a single-tasking HTTP server. That means that unlike |
93 |
traditional web servers, it does not fork for each incoming |
traditional web servers, it does not fork for each incoming |
94 |
connection, nor does it fork many copies of itself to handle multiple |
connection, nor does it fork many copies of itself to handle multiple |
95 |
connections. It internally multiplexes all of the ongoing HTTP |
connections. It internally multiplexes all of the ongoing HTTP |
96 |
connections, and forks only for CGI programs (which must be separate |
connections, and forks only for CGI programs (which must be separate |
97 |
processes), automatic directory generation, and automatic file |
processes), automatic directory generation, and automatic file |
98 |
gunzipping. Preliminary tests show Boa is capable of |
gunzipping. Preliminary tests show Hydra is capable of |
99 |
handling several thousand hits per second on a 300 MHz Pentium and |
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. |
dozens of hits per second on a lowly 20 MHz 386/SX. |
101 |
|
|
102 |
The primary design goals of Boa are speed and security. Security, |
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 |
in the sense of @emph{can't be subverted by a malicious user,} not |
104 |
@emph{fine grained access control and encrypted communications}. |
@emph{fine grained access control and encrypted communications}. |
105 |
Boa is not intended as a feature-packed server; if you want one of those, |
Hydra is not intended as a feature-packed server; if you want one of those, |
106 |
check out |
check out |
107 |
WN (@uref{http://hopf.math.nwu.edu/}) from John Franks. |
WN (@uref{http://hopf.math.nwu.edu/}) from John Franks. |
108 |
Modifications to Boa that improve its speed, security, robustness, and |
Modifications to Hydra that improve its speed, security, robustness, and |
109 |
portability, are eagerly sought. Other features may be added if they |
portability, are eagerly sought. Other features may be added if they |
110 |
can be achieved without hurting the primary goals. |
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}). |
Boa was created in 1991 by Paul Phillips (@email{psp@@well.com}). |
114 |
It is now being maintained and enhanced by Larry Doolittle |
It is now being maintained and enhanced by Larry Doolittle |
115 |
(@email{ldoolitt@@boa.org}) and Jon Nelson |
(@email{ldoolitt@@boa.org}) and Jon Nelson |
116 |
(@email{jnelson@@boa.org}). |
(@email{jnelson@@boa.org}). |
117 |
Please see the acknowledgement section for further |
Please see the acknowledgement section for further |
118 |
details. |
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. |
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. |
If you'd like to contribute to this effort, contact Larry or Jon via e-mail. |
126 |
@node Installation and Usage, Limits and Design Philosophy, Introduction,top |
@node Installation and Usage, Limits and Design Philosophy, Introduction,top |
127 |
@chapter Installation and Usage |
@chapter Installation and Usage |
128 |
|
|
129 |
Boa is currently being developed and tested on GNU/Linux/i386. |
Hydra is currently being developed and tested on GNU/Linux/i386. |
130 |
The code is straightforward (more so than most other servers), |
The code is straightforward (more so than most other servers), |
131 |
so it should run easily on most modern Unix-alike platforms. Recent |
so it should run easily on most modern Unix-alike platforms. Recent |
132 |
versions of Boa worked fine on FreeBSD, SunOS 4.1.4, GNU/Linux-SPARC, |
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 |
and HP-UX 9.0. Pre-1.2.0 GNU/Linux kernels may not work because of |
134 |
deficient mmap() implementations. |
deficient mmap() implementations. |
135 |
|
|
136 |
@menu |
@menu |
137 |
* Installation:: |
* Installation:: |
138 |
* Files Used by Boa:: |
* Files Used by Hydra:: |
139 |
* Compile-Time and Command-Line Options:: |
* Compile-Time and Command-Line Options:: |
140 |
* Security:: |
* Security:: |
141 |
@end menu |
@end menu |
142 |
|
|
143 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
144 |
@node Installation,Files Used by Boa,,Installation and Usage |
@node Installation,Files Used by Hydra,,Installation and Usage |
145 |
@section Installation |
@section Installation |
146 |
|
|
147 |
@enumerate |
@enumerate |
148 |
@item Unpack |
@item Unpack |
149 |
@enumerate |
@enumerate |
150 |
@item Choose, and cd into, a convenient directory for the package. |
@item Choose, and cd into, a convenient directory for the package. |
151 |
@item @kbd{tar -xvzf boa-0.94.tar.gz}, or for those of you with an archaic |
@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 < boa-0.94.tar.gz | tar -xvf -} |
(non-GNU) tar; @kbd{gzip -cd < hydra-x.y.z.tar.gz | tar -xvf -} |
153 |
@item Read the documentation. Really. |
@item Read the documentation. Really. |
154 |
@end enumerate |
@end enumerate |
155 |
@item Build |
@item Build |
163 |
@end enumerate |
@end enumerate |
164 |
@item Configure |
@item Configure |
165 |
@enumerate |
@enumerate |
166 |
@item Choose a user and server port under which Boa can run. The |
@item Choose a user and server port under which Hydra can run. The |
167 |
traditional port is 80, and user @t{nobody} (create if |
traditional port is 80, and user @t{nobody} (create if |
168 |
you need to) is often a good selection for security purposes. |
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 |
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. |
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 |
@item Choose a server root. The @t{conf} directory within the |
172 |
server root must hold your copy of the configuration file |
server root must hold your copy of the configuration file |
173 |
@emph{boa.conf} |
@emph{hydra.conf} |
174 |
@item Choose locations for log files, CGI programs (if any), and |
@item Choose locations for log files, CGI programs (if any), and |
175 |
the base of your URL tree. |
the base of your URL tree. |
176 |
@item Set the location of the @t{mime.types} file. |
@item Set the location of the @t{mime.types} file. |
177 |
@item Edit @emph{conf/boa.conf} according to your |
@item Edit @emph{conf/hydra.conf} according to your |
178 |
choices above (this file documents itself). Read through this file |
choices above (this file documents itself). Read through this file |
179 |
to see what other features you can configure. |
to see what other features you can configure. |
180 |
@end enumerate |
@end enumerate |
181 |
@item Start |
@item Start |
182 |
@itemize |
@itemize |
183 |
@item Start Boa. If you didn't build the right SERVER_ROOT into the |
@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 |
binary, you can specify it on the command line with the -c option |
185 |
(command line takes precedence). |
(command line takes precedence). |
186 |
@example |
@example |
187 |
Example: ./boa -c /usr/local/boa |
Example: ./hydra -c /usr/local/hydra |
188 |
@end example |
@end example |
189 |
@end itemize |
@end itemize |
190 |
|
|
203 |
@end enumerate |
@end enumerate |
204 |
|
|
205 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
206 |
@node Files Used by Boa, Compile-Time and Command-Line Options, Installation,Installation and Usage |
@node Files Used by Hydra, Compile-Time and Command-Line Options, Installation,Installation and Usage |
207 |
@section Files Used by Boa |
@section Files Used by Hydra |
208 |
|
|
209 |
@ftable @file |
@ftable @file |
210 |
@item boa.conf |
@item hydra.conf |
211 |
This file is the sole configuration file for Boa. The directives in this |
This file is the sole configuration file for Hydra. The directives in this |
212 |
file are defined in the DIRECTIVES section. |
file are defined in the DIRECTIVES section. |
213 |
@item mime.types |
@item mime.types |
214 |
The MimeTypes <filename> defines what Content-Type Boa will |
The MimeTypes <filename> defines what Content-Type Hydra will |
215 |
send in an HTTP/1.0 or better transaction. |
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. |
Set to /dev/null if you do not want to load a mime types file. |
217 |
Do *not* comment out (better use AddType!) |
Do *not* comment out (better use AddType!) |
218 |
@end ftable |
@end ftable |
219 |
|
|
220 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
221 |
@node Compile-Time and Command-Line Options, boa.conf Directives, Files Used by Boa,Installation and Usage |
@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 |
@section Compile-Time and Command-Line Options |
223 |
|
|
224 |
@table @var |
@table @var |
227 |
The default server root as #defined by @var{SERVER_ROOT} in |
The default server root as #defined by @var{SERVER_ROOT} in |
228 |
@file{defines.h} can be overridden on the commandline using the |
@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 |
@option{-c} option. The server root must hold your local copy of the |
230 |
configuration file @file{boa.conf}. |
configuration file @file{hydra.conf}. |
231 |
@example |
@example |
232 |
Example: /usr/sbin/boa -c /etc/boa |
Example: /usr/sbin/hydra -c /etc/hydra |
233 |
@end example |
@end example |
234 |
|
|
235 |
@end table |
@end table |
236 |
|
|
237 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
238 |
@node boa.conf Directives, Security, Compile-Time and Command-Line Options, (top) |
@node hydra.conf Directives, Security, Compile-Time and Command-Line Options, (top) |
239 |
@section boa.conf Directives |
@section hydra.conf Directives |
240 |
|
|
241 |
The Boa configuration file is parsed with a lex/yacc or flex/bison |
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 |
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 |
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 |
is very simple, and they can occur in any order. Where possible, these |
249 |
compiled into the server (see @file{defines.h}) or specified on the command |
compiled into the server (see @file{defines.h}) or specified on the command |
250 |
line with the @command{-c} option. |
line with the @command{-c} option. |
251 |
|
|
252 |
The following directives are contained in the @file{boa.conf} file, and most, |
The following directives are contained in the @file{hydra.conf} file, and most, |
253 |
but not all, are required. |
but not all, are required. |
254 |
|
|
255 |
@table @option |
@table @option |
256 |
@item Port <Integer> |
@item Port <Integer> |
257 |
This is the port that Boa runs on. The default port for http servers is 80. |
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. |
If it is less than 1024, the server must be started as root. |
259 |
|
|
260 |
@item Listen <IP> |
@item Listen <IP> |
268 |
IP addresses, you have three choices: |
IP addresses, you have three choices: |
269 |
|
|
270 |
@enumerate |
@enumerate |
271 |
@item Run boa without a "Listen" directive: |
@item Run hydra without a "Listen" directive: |
272 |
@itemize @bullet |
@itemize @bullet |
273 |
@item All addresses are treated the same; makes sense if the addresses |
@item All addresses are treated the same; makes sense if the addresses |
274 |
are localhost, ppp, and eth0. |
are localhost, ppp, and eth0. |
275 |
@item Use the VirtualHost directive below to point requests to different files. |
@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). |
Should be good for a very large number of addresses (web hosting clients). |
277 |
@end itemize |
@end itemize |
278 |
@item Run one copy of boa per IP address: |
@item Run one copy of hydra per IP address: |
279 |
@itemize @bullet |
@itemize @bullet |
280 |
@item Each instance has its own configuration with its own |
@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 |
"Listen" directive. No big deal up to a few tens of addresses. Nice separation |
284 |
@end enumerate |
@end enumerate |
285 |
|
|
286 |
@item User <username or UID> |
@item User <username or UID> |
287 |
The name or UID the server should run as. For Boa to attempt this, the |
The name or UID the server should run as. For Hydra to attempt this, the |
288 |
server must be started as root. |
server must be started as root. |
289 |
|
|
290 |
@item Group <groupname or GID> |
@item Group <groupname or GID> |
291 |
The group name or GID the server should run as. For Boa to attempt this, |
The group name or GID the server should run as. For Hydra to attempt this, |
292 |
the server must be started as root. |
the server must be started as root. |
293 |
|
|
294 |
@item ServerAdmin <email address> |
@item ServerAdmin <email address> |
348 |
|
|
349 |
@item DirectoryCache <directory> |
@item DirectoryCache <directory> |
350 |
DirectoryCache: If DirectoryIndex doesn't exist, and DirectoryMaker has been |
DirectoryCache: If DirectoryIndex doesn't exist, and DirectoryMaker has been |
351 |
commented out, the the on-the-fly indexing of Boa can be used to generate indexes |
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 |
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 |
delays when slow disks are used. Note: The DirectoryCache must be writable by the |
354 |
same user/group that Boa runs as. |
same user/group that Hydra runs as. |
355 |
|
|
356 |
@item KeepAliveMax <integer> |
@item KeepAliveMax <integer> |
357 |
Number of KeepAlive requests to allow per connection. Comment out, or set |
Number of KeepAlive requests to allow per connection. Comment out, or set |
392 |
maps a virtual path to a directory for serving scripts. |
maps a virtual path to a directory for serving scripts. |
393 |
|
|
394 |
@item Allow, Deny |
@item Allow, Deny |
395 |
Only supported if Boa is compiled with --enable-access-control. |
Only supported if Hydra is compiled with --enable-access-control. |
396 |
Allow and Deny allows pattern based access control using shell |
Allow and Deny allows pattern based access control using shell |
397 |
wildcards. The string the matching is performed on is the absolute |
wildcards. The string the matching is performed on is the absolute |
398 |
filesystem filename. The Allow, Deny directives are processed in |
filesystem filename. The Allow, Deny directives are processed in |
412 |
@end table |
@end table |
413 |
|
|
414 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
415 |
@node Security, , boa.conf Directives, Installation and Usage |
@node Security, , hydra.conf Directives, Installation and Usage |
416 |
@section Security |
@section Security |
417 |
|
|
418 |
Boa has been designed to use the existing file system security. In |
Hydra has been designed to use the existing file system security. In |
419 |
@file{boa.conf}, the directives @emph{user} and |
@file{hydra.conf}, the directives @emph{user} and |
420 |
@emph{group} determine who Boa will run as, if launched by root. |
@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 |
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 |
of flexibility. For example, if you want to disallow access to otherwise |
423 |
accessible directories or files, simply make them inaccessible to |
accessible directories or files, simply make them inaccessible to |
424 |
nobody/nogroup. If the user that Boa runs as is "boa" and the groups that |
nobody/nogroup. If the user that Hydra runs as is "hydra" and the groups that |
425 |
"boa" belongs to include "web-stuff" then files/directories accessible |
"hydra" belongs to include "web-stuff" then files/directories accessible |
426 |
by users with group "web-stuff" will also be accessible to Boa. |
by users with group "web-stuff" will also be accessible to Hydra. |
427 |
|
|
428 |
The February 2000 hoo-rah from |
The February 2000 hoo-rah from |
429 |
@uref{http://www.cert.org/advisories/CA-2000-02.html,CERT advisory CA-2000-02} |
@uref{http://www.cert.org/advisories/CA-2000-02.html,CERT advisory CA-2000-02} |
430 |
has little to do with Boa. As of version 0.94.4, Boa's escaping rules have |
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 |
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 |
programs have been updated to show what effort is needed there. If you |
433 |
write, maintain, or use CGI programs under Boa (or any other server) it's |
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, |
worth your while to read and understand this advisory. The real problem, |
435 |
however, boils down to browser and web page designers emphasizing frills |
however, boils down to browser and web page designers emphasizing frills |
436 |
over content and security. The market leading browsers assume (incorrectly) |
over content and security. The market leading browsers assume (incorrectly) |
446 |
|
|
447 |
@menu |
@menu |
448 |
* Limits:: |
* Limits:: |
449 |
* Differences between Boa and other web servers:: |
* Differences between Hydra and other web servers:: |
450 |
* Unexpected Behavior:: |
* Unexpected Behavior:: |
451 |
@end menu |
@end menu |
452 |
|
|
453 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
454 |
@node Limits,Differences between Boa and other web servers,,Limits and Design Philosophy |
@node Limits,Differences between Hydra and other web servers,,Limits and Design Philosophy |
455 |
@section Limits |
@section Limits |
456 |
|
|
457 |
@itemize @bullet |
@itemize @bullet |
461 |
network connection to the HTTP requests, or performance will suffer. |
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 |
For instance, if a document is served from a CD-ROM, the whole server |
463 |
(including all other currently incomplete data transfers) will stall |
(including all other currently incomplete data transfers) will stall |
464 |
while the CD-ROM spins up. This is a consequence of the fact that Boa |
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 |
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 |
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 |
(the faster the better), this is no problem, and in fact delivers |
474 |
Writing a nonblocking gethostbyaddr is a difficult and not very |
Writing a nonblocking gethostbyaddr is a difficult and not very |
475 |
enjoyable task. Paul Phillips experimented with several methods, |
enjoyable task. Paul Phillips experimented with several methods, |
476 |
including a separate logging process, before removing hostname |
including a separate logging process, before removing hostname |
477 |
lookups entirely. There is a companion program with Boa |
lookups entirely. There is a companion program with Hydra |
478 |
@file{util/resolver.pl} that will postprocess the logfiles and |
@file{util/resolver.pl} that will postprocess the logfiles and |
479 |
replace IP addresses with hostnames, which is much faster no matter |
replace IP addresses with hostnames, which is much faster no matter |
480 |
what sort of server you run. |
what sort of server you run. |
482 |
@item Identd lookups |
@item Identd lookups |
483 |
|
|
484 |
Same difficulties as hostname lookups; not included. |
Same difficulties as hostname lookups; not included. |
485 |
Boa provides a REMOTE_PORT environment variable, in addition |
Hydra provides a REMOTE_PORT environment variable, in addition |
486 |
to REMOTE_ADDR, so that a CGI program can do its own ident. |
to REMOTE_ADDR, so that a CGI program can do its own ident. |
487 |
See the end of @t{examples/cgi-test.cgi}. |
See the end of @t{examples/cgi-test.cgi}. |
488 |
|
|
490 |
|
|
491 |
If users are allowed to serve HTML from their home directories, |
If users are allowed to serve HTML from their home directories, |
492 |
password file lookups can potentially block the process. To lessen |
password file lookups can potentially block the process. To lessen |
493 |
the impact, each user's home directory is cached by Boa so it need |
the impact, each user's home directory is cached by Hydra so it need |
494 |
only be looked up once. |
only be looked up once. |
495 |
|
|
496 |
@item Running out of file descriptors |
@item Running out of file descriptors |
507 |
@end itemize |
@end itemize |
508 |
|
|
509 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
510 |
@node Differences between Boa and other web servers,Unexpected Behavior,Limits,Limits and Design Philosophy |
@node Differences between Hydra and other web servers,Unexpected Behavior,Limits,Limits and Design Philosophy |
511 |
@section Differences between Boa and other web servers |
@section Differences between Hydra and other web servers |
512 |
|
|
513 |
In the pursuit of speed and simplicity, some aspects of Boa differ |
In the pursuit of speed and simplicity, some aspects of Hydra differ |
514 |
from the popular web servers. In no particular order: |
from the popular web servers. In no particular order: |
515 |
|
|
516 |
@itemize @bullet |
@itemize @bullet |
521 |
IP address is provided in the @var{REMOTE_HOST} variable, so (if the CGI |
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. |
program actually cares) gethostbyaddr or a variant can be used. |
523 |
|
|
524 |
@item There are no server side includes (@acronym{SSI}) in Boa |
@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 |
We don't like them, and they are too slow to parse. We will consider |
527 |
more efficient alternatives. |
more efficient alternatives. |
528 |
|
|
529 |
@item There are no access control features |
@item There are no access control features |
530 |
|
|
531 |
Boa will follow symbolic links, and serve any file that it can |
Hydra will follow symbolic links, and serve any file that it can |
532 |
read. The expectation is that you will configure Boa to run as user |
read. The expectation is that you will configure Hydra to run as user |
533 |
"nobody", and only files configured world readable will come |
"nobody", and only files configured world readable will come |
534 |
out. |
out. |
535 |
|
|
540 |
@end itemize |
@end itemize |
541 |
|
|
542 |
@comment node-name, next, previous, up |
@comment node-name, next, previous, up |
543 |
@node Unexpected Behavior,,Differences between Boa and other web servers,Limits and Design Philosophy |
@node Unexpected Behavior,,Differences between Hydra and other web servers,Limits and Design Philosophy |
544 |
@section Unexpected Behavior |
@section Unexpected Behavior |
545 |
|
|
546 |
@itemize @bullet |
@itemize @bullet |
547 |
@item SIGHUP handling |
@item SIGHUP handling |
548 |
|
|
549 |
Like any good server, Boa traps SIGHUP and rereads @file{boa.conf}. |
Like any good server, Hydra traps SIGHUP and rereads @file{hydra.conf}. |
550 |
However, under normal circumstances, it has already given away |
However, under normal circumstances, it has already given away |
551 |
permissions, so many items listed in @file{boa.conf} can not take effect. |
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. |
No attempt is made to change uid, gid, log files, or server port. |
553 |
All other configuration changes should take place smoothly. |
All other configuration changes should take place smoothly. |
554 |
|
|
555 |
@item SIGUSR1 handling |
@item SIGUSR1 handling |
556 |
|
|
557 |
Boa traps SIGUSR1 and prints useful statistics in the error log file. |
Hydra traps SIGUSR1 and prints useful statistics in the error log file. |
558 |
|
|
559 |
@item Relative URL handling |
@item Relative URL handling |
560 |
|
|
561 |
Not all browsers handle relative URLs correctly. Boa will not |
Not all browsers handle relative URLs correctly. Hydra will not |
562 |
cover up for this browser bug, and will typically report 404 Not Found |
cover up for this browser bug, and will typically report 404 Not Found |
563 |
for URL's containing odd combinations of "../" 's. |
for URL's containing odd combinations of "../" 's. |
564 |
|
|
591 |
|
|
592 |
@smallexample |
@smallexample |
593 |
/* |
/* |
594 |
* Boa, an http server |
* Hydra, an http server |
595 |
* Copyright (C) 1995 Paul Phillips <psp@@well.com> |
* Copyright (C) 1995 Paul Phillips <psp@@well.com> |
596 |
* |
* |
597 |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
616 |
@node Acknowledgments,Reference Documents,License,Appendix |
@node Acknowledgments,Reference Documents,License,Appendix |
617 |
@section Acknowledgments |
@section Acknowledgments |
618 |
|
|
619 |
Paul Phillips wrote the first versions of Boa, up to and including |
Paul Phillips wrote the first versions of Hydra, up to and including |
620 |
version 0.91. Version 0.92 of Boa was officially released December 1996 |
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, |
by Larry Doolittle. Version 0.93 was the development version of 0.94, |
622 |
which was released in February 2000. |
which was released in February 2000. |
623 |
|
|
631 |
We would also like to thank Paul Philips for writing code that is |
We would also like to thank Paul Philips for writing code that is |
632 |
worth maintaining and supporting. |
worth maintaining and supporting. |
633 |
|
|
634 |
Many people have contributed to Boa, including (but not |
Many people have contributed to Hydra, including (but not |
635 |
limited to) Charles F. Randall (@email{randall@@goldsys.com}) |
limited to) Charles F. Randall (@email{randall@@goldsys.com}) |
636 |
Christoph Lameter (@email{<chris@@waterf.org>}), |
Christoph Lameter (@email{<chris@@waterf.org>}), |
637 |
Russ Nelson (@email{<nelson@@crynwr.com>}), Alain Magloire |
Russ Nelson (@email{<nelson@@crynwr.com>}), Alain Magloire |
652 |
@section Reference Documents |
@section Reference Documents |
653 |
|
|
654 |
Links to documents relevant to |
Links to documents relevant to |
655 |
@uref{http://www.boa.org/,Boa} |
@uref{http://hydra.hellug.gr/,Hydra} |
656 |
development and usage. Incomplete, we're still working on this. |
development and usage. Incomplete, we're still working on this. |
657 |
NCSA has a decent |
NCSA has a decent |
658 |
@uref{http://hoohoo.ncsa.uiuc.edu/docs/Library.html,page} along |
@uref{http://hoohoo.ncsa.uiuc.edu/docs/Library.html,page} along |
691 |
For unix-alike platforms, with published source code. |
For unix-alike platforms, with published source code. |
692 |
|
|
693 |
@itemize |
@itemize |
694 |
@item tiny/turbo/throttling httpd very similar to Boa, with a throttling |
@item tiny/turbo/throttling httpd very similar to Hydra, with a throttling |
695 |
feature |
feature |
696 |
@* @uref{http://www.acme.com/software/thttpd/} |
@* @uref{http://www.acme.com/software/thttpd/} |
697 |
|
|
723 |
|
|
724 |
Also worth mentioning is Zeus. |
Also worth mentioning is Zeus. |
725 |
It is commercial, with a free demo, so it doesn't belong on the list above. |
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 Boa and thttpd, |
Zeus seems to be based on technology similar to Hydra and thttpd, |
727 |
but with more bells and whistles. |
but with more bells and whistles. |
728 |
@* @uref{http://www.zeus.co.uk/products/server/} |
@* @uref{http://www.zeus.co.uk/products/server/} |
729 |
|
|
765 |
@item cgiwrap |
@item cgiwrap |
766 |
@* @uref{http://www.umr.edu/@~cgiwrap/} |
@* @uref{http://www.umr.edu/@~cgiwrap/} |
767 |
|
|
768 |
@item suEXEC (Boa would need to be ..umm.. "adjusted" to support this) |
@item suEXEC (Hydra would need to be ..umm.. "adjusted" to support this) |
769 |
@* @uref{http://www.apache.org/docs/suexec.html} |
@* @uref{http://www.apache.org/docs/suexec.html} |
770 |
@end itemize |
@end itemize |
771 |
|
|