• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

Config.inD01-Feb-201081 54

MakefileD01-Feb-2010638 2610

READMED01-Feb-20107.3 KiB248177

accept.cD01-Feb-20102.8 KiB12859

datasending.cD01-Feb-20105.7 KiB242149

logging.cD01-Feb-20102.1 KiB9638

main.cD01-Feb-20109 KiB363209

make_times_h.cD01-Feb-20102.4 KiB12379

misc.cD01-Feb-20105.3 KiB243141

prototypes.hD01-Feb-20102.5 KiB12058

rfc.cD01-Feb-20107.8 KiB375245

rfc_time.cD01-Feb-20104.7 KiB228152

security.cD01-Feb-20105.2 KiB255133

security.hD01-Feb-2010211 139

sockets.cD01-Feb-20102.4 KiB10244

structure.hD01-Feb-20101.8 KiB6936

sysctl.cD01-Feb-20106.8 KiB342284

sysctl.hD01-Feb-2010616 2116

userspace.cD01-Feb-20104.7 KiB244138

waitheaders.cD01-Feb-20106.6 KiB303173

README

1=====
2
3kHTTPd  -  Kernel httpd accelerator
4
5(C) 1999 by Arjan van de Ven
6Licensed under the terms of the GNU General Public License
7
8=====
9
10
111. Introduction
12---------------
13   kHTTPd is a http-daemon (webserver) for Linux. kHTTPd is different from
14   other webservers in that it runs from within the Linux-kernel as a module
15   (device-driver).
16
17   kHTTPd handles only static (file based) web-pages, and passes all requests
18   for non-static information to a regular userspace-webserver such as Apache
19   or Zeus. The userspace-daemon doesn't have to be altered in any way.
20
21   Static web-pages are not a very complex thing to serve, but these are very
22   important nevertheless, since virtually all images are static, and a large
23   portion of the html-pages are static also. A "regular" webserver has little
24   added value for static pages, it is simply a "copy file to network"
25   operation.
26   This can be done very efficiently from within the Linux-kernel, for example
27   the nfs (network file system) daemon performs a similar task and also runs
28   in the kernel.
29
30   By "accelerating" the simple case within the kernel, userspace daemons can
31   do what they are very good at: Generating user-specific, dynamic content.
32
33   Note: This document sometimes uses "Apache" instead of "any webserver you
34   ever might want to use", just for reasons of readability.
35
36
372. Quick Start
38--------------
39
40   1) compile and load the module
41   2) configure the module in /proc/sys/net/khttpd if needed
42   3) echo 1 > /proc/sys/net/khttpd/start
43
44   unloading:
45
46   echo 1 > /proc/sys/net/khttpd/stop
47   echo 1 > /proc/sys/net/khttpd/unload
48   sleep 2
49   rmmod khttpd
50
51
52
533. Configuration
54----------------
55
56   Modes of operation
57   ==================
58
59
60   There are two recommended modes of operation:
61
62   1) "Apache" is main webserver, kHTTPd is assistant
63	clientport   -> 80
64  	serverport   -> 8080 (or whatever)
65
66   2) kHTTPd is main webserver, "Apache" is assistant
67	clientport   -> 8080 (or whatever)
68 	serverport   -> 80
69
70
71   Configuring kHTTPd
72   ==================
73
74   Before you can start using kHTTPd, you have to configure it. This
75   is done through the /proc filesystem, and can thus be done from inside
76   a script. Most parameters can only be set when kHTTPd is stopped.
77
78   The following things need configuration:
79
80   1) The port where kHTTPd should listen for requests
81   2) The port (on "localhost") where "Apache" is listening
82   3) The location of the documents (documentroot)
83   4) The strings that indicate dynamic content (optional)
84      [  "cgi-bin" is added by default ]
85
86   It is very important that the documentroot for kHTTPd matches the
87   documentroot for the userspace-daemon, as kHTTPd might "redirect"
88   any request to this userspace-daemon.
89
90   A typical script (for the first mode of operation) to do this would
91   look like:
92
93#!/bin/sh
94modprobe khttpd
95echo 80 > /proc/sys/net/khttpd/clientport
96echo 8080 > /proc/sys/net/khttpd/serverport
97echo /var/www > /proc/sys/net/khttpd/documentroot
98echo php3 > /proc/sys/net/khttpd/dynamic
99echo shtml > /proc/sys/net/khttpd/dynamic
100echo 1 > /proc/sys/net/khttpd/start
101
102   For the second mode of operation, this would be:
103
104#!/bin/sh
105modprobe khttpd
106echo 8080 > /proc/sys/net/khttpd/clientport
107echo 80 > /proc/sys/net/khttpd/serverport
108echo /var/www > /proc/sys/net/khttpd/documentroot
109echo php3 > /proc/sys/net/khttpd/dynamic
110echo shtml > /proc/sys/net/khttpd/dynamic
111echo 1 > /proc/sys/net/khttpd/start
112
113   In this case, you also have to change the configuration of the
114   userspace-daemon. For Apache, you do this by changing
115
116   Port 80
117
118   to
119
120   Port 8080
121
122   Starting kHTTPd
123   ===============
124   Once you have set up the configuration, start kHTTPD by running
125   echo 1 > /proc/sys/net/khttpd/start
126   It may take a jiffie or two to start.
127
128   Stopping kHTTPd
129   ===============
130   To stop kHTTPd, do
131   echo 1 > /proc/sys/net/khttpd/stop
132   It should stop in a jiffy or two.
133
134   Unloading kHTTPd
135   ===============
136   To unload the module, do
137   echo 1 > /proc/sys/net/khttpd/stop
138   echo 1 > /proc/sys/net/khttpd/unload
139   #killall -HUP khttpd
140   sleep 2
141   rmmod khttpd
142
143   If this doesn't work fast enough for you (unloading can wait for
144   a remote connection to close down), you can send the daemons a "HUP"
145   signal after you told them to stop. This will cause the daemon-threads to
146   stop immediately.
147
148
1494. Permissions
150--------------
151   The security model of kHTTPd is very strict. It can be, since there is a
152   userspace daemon that can handle the complex exceptions.
153
154   kHTTPd only serves a file if
155
156	1)  There is no "?" in the URL
157	2)  The URL starts with a "/"
158	3)  The file indicated by the URL exists
159	4)  The file is world-readable (*)
160	5)  The file is not a directory, executable or has the Sticky-bit
161	    set (*)
162	6)  The URL doesn't contain any "forbidden" substrings such as ".."
163	    and "cgi-bin" (*)
164	7)  The mime-type is known (*)
165
166   The items marked with a (*) are configurable through the
167   sysctl-parameters in /proc/sys/net/khttpd.
168
169
170   In all cases where any of the above conditions isn't met, the
171   userspace-daemon is handed the request.
172
173
174
1755. Parameters
176-------------
177   The following parameters are settable through /proc/sys/net/khttpd:
178
179	Name		Default		Description
180
181	serverport	8080		The port where kHTTPd listens on
182
183	clientport	80		The port of the userspace
184					http-daemon
185
186	threads		2		The number of server-threads. Should
187					be 1 per CPU for small websites, 2
188					per CPU for big (the active files
189					do not fit in the RAM) websites.
190
191	documentroot	/var/www	the directory where the
192					document-files are
193
194	start		0		Set to 1 to start kHTTPd
195					(this also resets "stop" to 0)
196
197	stop		0		Set to 1 to stop kHTTPd
198					(this also resets "start" to 0)
199
200	unload		0		Set to 1 to prepare kHTTPd for
201					unloading of the module
202
203	sloppymime	0		If set to 1, unknown mime-types are
204					set to text/html. If set to 0,
205					files with unknown mime-types are
206					handled by the userspace daemon
207
208	perm_required	S_IROTH		Minimum permissions required
209					(for values see "man 2 stat")
210
211	perm_forbid	dir+sticky+	Permission-mask with "forbidden"
212			execute		permissions.
213					(for values see "man 2 stat")
214
215	dynamic		cgi-bin ..	Strings that, if they are a subset
216					of the URL, indicate "dynamic
217					content"
218
219	maxconnect	1000		Maximum number of concurrent
220					connections
221
2226. Known Issues
223   kHTTPd is *not* currently compatible with tmpfs.  Trying to serve
224   files stored on a tmpfs partition is known to cause kernel oopses
225   as of 2.4.18.  This is due to the same problem that prevents sendfile()
226   from being usable with tmpfs.  A tmpfs patch is floating around that seems
227   to fix this, but has not been released as of 27 May 2002.
228   kHTTPD does work fine with ramfs, though.
229
230   There is debate about whether to remove kHTTPd from the main
231   kernel sources.  This will probably happen in the 2.5 kernel series,
232   after which khttpd will still be available as a patch.
233
234   The kHTTPd source code could use a good spring cleaning.
235
2367. More information
237-------------------
238   More information about the architecture of kHTTPd, the mailinglist and
239   configuration-examples can be found at the kHTTPd homepage:
240
241	http://www.fenrus.demon.nl
242
243   Bugreports, patches, etc can be send to the mailinglist
244   (khttpd-users@zgp.org) or to khttpd@fenrus.demon.nl
245   Mailing list archives are at
246      http://lists.alt.org/mailman/listinfo/khttpd-users
247
248