Remove building with NOCRYPTO option
[minix.git] / libexec / httpd / bozohttpd.8
blob876ff6bb32ec2d227fa78766ddab06f84ee6918c
1 .\"     $NetBSD: bozohttpd.8,v 1.53 2015/08/13 12:30:08 wiz Exp $
2 .\"
3 .\"     $eterna: bozohttpd.8,v 1.101 2011/11/18 01:25:11 mrg Exp $
4 .\"
5 .\" Copyright (c) 1997-2015 Matthew R. Green
6 .\" All rights reserved.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\"
17 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 .\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 .\" SUCH DAMAGE.
28 .\"
29 .Dd May 1, 2015
30 .Dt BOZOHTTPD 8
31 .Os
32 .Sh NAME
33 .Nm bozohttpd
34 .Nd hyper text transfer protocol version 1.1 daemon
35 .Sh SYNOPSIS
36 .Nm
37 .Op Fl CIMPSZciptvx
38 .Op Fl C Ar suffix cgihandler
39 .Op Fl I Ar port
40 .Op Fl L Ar prefix script
41 .Op Fl M Ar suffix type encoding encoding11
42 .Op Fl P Ar pidfile
43 .Op Fl S Ar server_software
44 .Op Fl Z Ar cert privkey
45 .Op Fl c Ar cgibin
46 .Op Fl i Ar address
47 .Op Fl p Ar pubdir
48 .Op Fl t Ar chrootdir
49 .Op Fl v Ar virtualroot
50 .Op Fl x Ar index
51 .Ar slashdir
52 .Op Ar myname
53 .Sh DESCRIPTION
54 The
55 .Nm
56 program reads a
57 .Em HTTP
58 request from the standard input, and sends a reply to the standard output.
59 Besides ~user translation and virtual hosting support (see below), all file
60 requests are from
61 .Ar slashdir
62 directory.
63 The server uses
64 .Ar myname
65 as its name, which defaults to the local hostname, obtained from
66 .Xr gethostname 3
67 (but see the
68 .Fl v
69 option for virtual hosting.)
70 .Nm
71 writes logs to
72 .Xr syslog 3
73 using the ftp facility (but see the
74 .Fl s
75 option for testing.)
76 .Nm
77 is designed to be small, simple and relatively featureless,
78 hopefully increasing its security.
79 .Ss OPTIONS
80 The following options are available:
81 .Bl -tag -width xxxcgibin
82 .It Fl b
83 Enables daemon mode, where
84 .Nm
85 detaches from the current terminal, running in the background and
86 servicing HTTP requests.
87 .It Fl C Ar suffix cgihandler
88 Adds a new CGI handler program for a particular file type.
89 The
90 .Ar suffix
91 should be any normal file suffix, and the
92 .Ar cgihandler
93 should be a full path to an interpreter.
94 This option is the only way to enable CGI programs that exist
95 outside of the cgibin directory to be executed.
96 Multiple
97 .Fl C
98 options may be passed.
99 .It Fl c Ar cgibin
100 Enables the CGI/1.1 interface.
102 .Ar cgibin
103 directory is expected to contain the CGI programs to be used.
105 looks for URL's in the form of
106 .Em /cgi-bin/\*[Lt]scriptname\*[Gt]
107 where
108 .Aq scriptname
109 is a valid CGI program in the
110 .Ar cgibin
111 directory.
112 In other words, all CGI URL's must begin with
113 .Em \%/cgi-bin/ .
114 Note that the CGI/1.1 interface is not available with
115 .Em ~user
116 translation.
117 .It Fl e
118 Causes
120 to not clear the environment when used with either the
121 .Fl t
123 .Fl U
124 options.
125 .It Fl f
126 Stops the
127 .Fl b
128 flag from
130 detaching from the tty and going into the background.
131 .It Fl H
132 Causes directory index mode to hide files and directories
133 that start with a period, except for
134 .Pa .. .
135 Also see
136 .Fl X .
137 .It Fl I Ar port
138 Causes
140 to use
141 .Ar port
142 instead of the default
143 .Dq http
144 port.
145 When used with the
146 .Fl b
147 option, it changes the bound port.
148 Otherwise it forces redirections to use this port instead of the
149 value obtained via
150 .Xr getsockname 2 .
151 .It Fl i Ar address
152 Causes
153 .Ar address
154 to be used as the address to bind daemon mode.
155 If otherwise unspecified, the address used to bind is derived from the
156 .Ar myname ,
157 which defaults to the name returned by
158 .Xr gethostname 3 .
159 Only the last
160 .Fl i
161 option is used.
162 This option is only valid with the
163 .Fl b
164 option.
165 .It Fl L Ar prefix script
166 Adds a new Lua script for a particular prefix.
168 .Ar prefix
169 should be an arbitrary text, and the
170 .Ar script
171 should be a full path to a Lua script.
172 Multiple
173 .Fl L
174 options may be passed.
175 A separate Lua state is created for each prefix.
176 The Lua script can register callbacks using the
177 httpd.register_handler('<name>', function) Lua function,
178 which will trigger the execution of the Lua function
179 .Em function
180 when a URL in the form
181 .Em http://<hostname>/<prefix>/<name>
182 is being accessed.
183 The function is passed three tables as arguments, the server
184 environment, the request headers, and the decoded query string
185 plus any data that was send as application/x-www-form-urlencoded.
186 .It Fl M Ar suffix type encoding encoding11
187 Adds a new entry to the table that converts file suffixes to
188 content type and encoding.
189 This option takes four additional arguments containing
190 the file prefix, its
191 .Dq Content-Type ,
192 .Dq Content-Encoding ,
194 .Dq Content-Encoding
195 for HTTP/1.1 connections, respectively.
196 If any of these are a single dash
197 .Pq Dq - ,
198 the empty string is used instead.
199 Multiple
200 .Fl M
201 options may be passed.
202 .It Fl n
203 Stops
205 from doing IP address to name resolution of hosts for setting the
206 .Ev REMOTE_HOST
207 variable before running a CGI program.
208 This option has no effect without the
209 .Fl c
210 option.
211 .It Fl P Ar pidfile
212 Causes
214 to create a pid file in
215 .Ar pidfile
216 when run in daemon mode with the
217 .Fl b
218 option.
219 .It Fl p Ar pubdir
220 Changes the default user directory for
221 .Em /~user/
222 translations from
223 .Dq public_html
225 .Ar pubdir .
226 .It Fl r
227 Forces pages besides the
228 .Dq index.html
229 (see the
230 .Fl X
231 option) page to require that the Referrer: header be present and
232 refer to this web server, otherwise a redirect to the
233 .Dq index.html
234 page will be returned instead.
235 .It Fl S Ar server_software
236 Sets the internal server version to
237 .Ar server_software .
238 .It Fl s
239 Forces logging to be set to stderr always.
240 .It Fl t Ar chrootdir
241 Makes
243 chroot to the specified directory
244 before answering requests.
245 Every other path should be specified relative
246 to the new root, if this option is used.
247 Note that the current environment
248 is normally replaced with an empty environment with this option, unless the
249 .Fl e
250 option is also used.
251 .It Fl U Ar username
252 Causes
254 to switch to the user and the groups of
255 .Ar username
256 after initialization.
257 This option, like
258 .Fl t
259 above, causes
261 to clear the environment unless the
262 .Fl e
263 option is given.
264 .It Fl u
265 Enables the transformation of Uniform Resource Locators of
266 the form
267 .Em /~user/
268 into the directory
269 .Pa ~user/public_html
270 (but see the
271 .Fl p
272 option above).
273 .It Fl V
274 Sets the default virtual host directory to
275 .Ar slashdir .
276 If no directory exists in
277 .Ar virtualroot
278 for the request, then
279 .Ar slashdir
280 will be used.
281 The default behaviour is to return 404 (Not Found.)
282 .It Fl v Ar virtualroot
283 Enables virtual hosting support.
284 Directories in
285 .Ar virtualroot
286 will be searched for a matching virtual host name, when parsing
287 the HTML request.
288 If a matching name is found, it will be used
289 as both the server's real name,
290 .Op Ar myname ,
291 and as the
292 .Ar slashdir .
293 See the
294 .Sx EXAMPLES
295 section for an example of using this option.
296 .It Fl X
297 Enables directory indexing.
298 A directory index will be generated only when the default file (i.e.
299 .Pa index.html
300 normally) is not present.
301 .It Fl x Ar index
302 Changes the default file read for directories from
303 .Dq index.html
305 .Ar index .
306 .It Fl Z Ar certificate_path privatekey_path
307 Sets the path to the server certificate file and the private key file
308 in pem format.
309 It also causes
311 to start SSL mode.
314 Note that in
316 versions 20031005 and prior that supported the
317 .Fl C
319 .Fl M
320 options, they took a single space-separated argument that was parsed.
321 since version 20040828, they take multiple options (2 in the case of
322 .Fl C
323 and 4 in the case of
324 .Fl M . )
325 .Ss INETD CONFIGURATION
328 uses
329 .Xr inetd 8
330 by default to process incoming TCP connections for HTTP requests
331 (but see the
332 .Fl b
333 option),
335 has little internal networking knowledge.
336 (Indeed, you can run it on the command line with little change of functionality.)
337 A typical
338 .Xr inetd.conf 5
339 entry would be:
340 .Bd -literal
341 http stream tcp  nowait:600 _httpd /usr/libexec/httpd httpd /var/www
342 http stream tcp6 nowait:600 _httpd /usr/libexec/httpd httpd /var/www
345 This would serve web pages from
346 .Pa /var/www
347 on both IPv4 and IPv6 ports.
349 .Em :600
350 changes the
351 requests per minute to 600, up from the
352 .Xr inetd 8
353 default of 40.
355 Using the
357 .Xr inetd 8 ,
358 you can provide multiple IP-address based HTTP servers by having multiple
359 listening ports with different configurations.
360 .Ss NOTES
361 This server supports the
362 .Em HTTP/0.9 ,
363 .Em HTTP/1.0 ,
365 .Em HTTP/1.1
366 standards.
367 Support for these protocols is very minimal and many optional features are
368 not supported.
371 can be compiled without
372 CGI support (NO_CGIBIN_SUPPORT),
373 user transformations (NO_USER_SUPPORT),
374 directory index support (NO_DIRINDEX_SUPPORT),
375 daemon mode support (NO_DAEMON_MODE),
376 dynamic MIME content (NO_DYNAMIC_CONTENT),
377 Lua suport (NO_LUA_SUPPORT),
378 and SSL support (NO_SSL_SUPPORT)
379 by defining the listed macros when building
380 .Nm .
381 .Ss HTTP BASIC AUTHORISATION
383 has support for HTTP Basic Authorisation.
384 If a file named
385 .Pa .htpasswd
386 exists in the directory of the current request,
388 will restrict access to documents in that directory
389 using the RFC 2617 HTTP
390 .Dq Basic
391 authentication scheme.
393 Note:
394 This does not recursively protect any sub-directories.
397 .Pa .htpasswd
398 file contains lines delimited with a colon containing
399 usernames and passwords hashed with
400 .Xr crypt 3 ,
401 for example:
402 .Bd -literal
403 heather:$1$pZWI4tH/$DzDPl63i6VvVRv2lJNV7k1
404 jeremy:A.xewbx2DpQ8I
408 .Nx ,
410 .Xr pwhash 1
411 utility may be used to generate hashed passwords.
413 While
415 distributed with
417 has support for HTTP Basic Authorisation enabled by default,
418 in the portable distribution it is excluded.
419 Compile
421 with
422 .Dq -DDO_HTPASSWD
423 on the compiler command line to enable this support.
424 It may require linking with the crypt library, using
425 .Dq -lcrypt .
426 .Ss SSL SUPPORT
428 has support for SSLv2, SSLv3, and TLSv1 protocols that is included by
429 default.
430 It requires linking with the crypto and ssl library, using
431 .Dq -lcrypto -lssl .
432 To disable SSL SUPPORT compile
434 with
435 .Dq -DNO_SSL_SUPPORT
436 on the compiler command line.
437 .Ss COMPRESSION
439 supports a very basic form compression.
441 will serve the requested file postpended with
442 .Dq Pa .gz
443 if it exists, it is readable, the client requested gzip compression, and
444 the client did not make a ranged request.
445 .Sh FILES
447 looks for a couple of special files in directories that allow certain features
448 to be provided on a per-directory basis.
449 In addition to the
450 .Pa .htpasswd
451 used by HTTP basic authorisation,
452 if a
453 .Pa .bzdirect
454 file is found (contents are irrelevant)
456 will allow direct access even with the
457 .Fl r
458 option.
459 If a
460 .Pa .bzredirect
461 symbolic link is found,
463 will perform a smart redirect to the target of this symlink.
464 The target is assumed to live on the same server.
465 If a
466 .Pa .bzabsredirect
467 symbolic link is found,
469 will redirect to the absolute url pointed to by this symlink.
470 This is useful to redirect to different servers.
471 .Sh EXAMPLES
472 To configure set of virtual hosts, one would use an
473 .Xr inetd.conf 5
474 entry like:
475 .Bd -literal
476 http stream tcp  nowait:600 _httpd /usr/libexec/httpd httpd -v /var/vroot /var/www
479 and inside
480 .Pa /var/vroot
481 create a directory (or a symlink to a directory) with the same name as
482 the virtual host, for each virtual host.
483 Lookups for these names are done in a case-insensitive manner, and may
484 include the port number part of the request, allowing for distinct
485 virtual hosts on the same name.
487 To use
489 with PHP, one must use the
490 .Fl C
491 option to specify a CGI handler for a particular file type.
492 Typically this will be like:
493 .Bd -literal
494 httpd -C .php /usr/pkg/bin/php /var/www
496 .Sh SEE ALSO
497 .Xr inetd.conf 5 ,
498 .Xr inetd 8
499 .Sh HISTORY
501 was first written in perl, based on another perl http server
502 called
503 .Dq tinyhttpd .
504 It was then rewritten from scratch in perl, and then once again in C.
505 From
506 .Dq bozohttpd
507 version 20060517, it has been integrated into
508 .Nx .
509 The focus has always been simplicity and security, with minimal features
510 and regular code audits.
511 This manual documents
513 version 20150501.
514 .Sh AUTHORS
515 .An -nosplit
517 was written by
518 .An Matthew R. Green
519 .Aq Mt mrg@eterna.com.au .
521 The large list of contributors includes:
522 .Bl -dash
524 .An Marc Balmer
525 .Aq Mt mbalmer@NetBSD.org
526 added Lua support for dynamic content creation
528 .An Christoph Badura
529 .Aq Mt bad@bsd.de
530 provided Range: header support
532 .An Sean Boudreau
533 .Aq Mt seanb@NetBSD.org
534 provided a security fix for virtual hosting
536 .An Julian Coleman
537 .Aq Mt jdc@coris.org.uk
538 provided an IPv6 bugfix
540 .An Chuck Cranor
541 .Aq Mt chuck@research.att.com
542 provided cgi-bin support fixes, and more
544 .An Alistair G. Crooks
545 .Aq Mt agc@NetBSD.org
546 cleaned up many internal interfaces, made
548 linkable as a library and provided the Lua binding.
550 .An DEGROOTE Arnaud
551 .Aq Mt degroote@NetBSD.org
552 provided a fix for daemon mode
554 .An Andrew Doran
555 .Aq Mt ad@NetBSD.org
556 provided directory indexing support
558 .An Per Ekman
559 .Aq Mt pek@pdc.kth.se
560 provided a fix for a minor (non-security) buffer overflow condition
562 .An Roland Dowdeswell
563 .Aq Mt elric@NetBSD.org
564 added support for serving gzipped files and better SSL handling
566 .An Jun-ichiro itojun Hagino, KAME
567 .Aq Mt itojun@iijlab.net
568 provided initial IPv6 support
570 .An Martin Husemann
571 .Aq Mt martin@NetBSD.org
572 provided .bzabsredirect support, and fixed various redirection issues
574 .An Arto Huusko
575 .Aq Mt arto.huusko@pp2.inet.fi
576 provided fixes cgi-bin
578 .An Roland Illig
579 .Aq Mt roland.illig@gmx.de
580 provided some off-by-one fixes
582 .An Zak Johnson
583 .Aq Mt zakj@nox.cx
584 provided cgi-bin enhancements
586 .An Nicolas Jombart
587 .Aq Mt ecu@ipv42.net
588 provided fixes for HTTP basic authorisation support
590 .An Antti Kantee
591 .Aq Mt pooka@NetBSD.org
592 provided fixes for HTTP basic authorisation support
594 .An Thomas Klausner
595 .Aq Mt wiz@NetBSD.org
596 provided many fixes and enhancements for the man page
598 .An Mateusz Kocielski
599 .Aq Mt shm@NetBSD.org
600 fixed memory leaks, various issues with userdir support,
601 information disclosure issues, added support for using CGI handlers
602 with directory indexing and provided various other fixes.
604 .An Arnaud Lacombe
605 .Aq Mt alc@NetBSD.org
606 provided some clean up for memory leaks
608 .An Johnny Lam
609 .Aq Mt jlam@NetBSD.org
610 provided man page fixes
612 .An Julio Merino
613 .Aq Mt jmmv@NetBSD.org
614 Added the
615 .Fl P
616 option.
618 .An Luke Mewburn
619 .Aq Mt lukem@NetBSD.org
620 provided many various fixes, including cgi-bin fixes and enhancements,
621 HTTP basic authorisation support and much code clean up
623 .An Rajeev V. Pillai
624 .Aq Mt rajeev_v_pillai@yahoo.com
625 provided several fixes for virtual hosting
627 .An Jeremy C. Reed
628 .Aq Mt reed@NetBSD.org
629 provided several clean up fixes, and man page updates
631 .An Scott Reynolds
632 .Aq Mt scottr@NetBSD.org
633 provided various fixes
635 .An Tyler Retzlaff
636 .Aq Mt rtr@eterna.com.au
637 provided SSL support, cgi-bin fixes and much other random other stuff
639 .An rudolf
640 .Aq Mt netbsd@eq.cz
641 provided minor compile fixes and a CGI content map fix
643 .An Steve Rumble
644 .Aq Mt rumble@ephemeral.org
645 provided the
646 .Fl V
647 option.
649 .An Thor Lancelot Simon
650 .Aq Mt tls@NetBSD.org
651 enhanced cgi-bin support.
653 .An Joerg Sonnenberger
654 .Aq Mt joerg@NetBSD.org
655 implemented If-Modified-Since support
657 .An ISIHARA Takanori
658 .Aq Mt ishit@oak.dti.ne.jp
659 provided a man page fix
661 .An Holger Weiss
662 .Aq Mt holger@CIS.FU-Berlin.DE
663 provided http authorisation fixes
665 .Aq Mt xs@kittenz.org
666 provided chroot and change-to-user support, and other various fixes
668 Coyote Point provided various CGI fixes.
670 .An Julio Merino
671 added pidfile support and provided some man page fixes.
674 There are probably others I have forgotten (let me know if you care)
676 Please send all updates to
679 .Aq Mt mrg@eterna.com.au
680 for inclusion in future releases.
681 .Sh BUGS
683 does not handle HTTP/1.1 chunked input from the client yet.