OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [net/] [khttpd/] [README] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
=====
2
 
3
kHTTPd  -  Kernel httpd accelerator
4
 
5
(C) 1999 by Arjan van de Ven
6
Licensed under the terms of the GNU General Public License
7
 
8
=====
9
 
10
 
11
1. 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
 
37
2. 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
 
53
3. 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
94
modprobe khttpd
95
echo 80 > /proc/sys/net/khttpd/clientport
96
echo 8080 > /proc/sys/net/khttpd/serverport
97
echo /var/www > /proc/sys/net/khttpd/documentroot
98
echo php3 > /proc/sys/net/khttpd/dynamic
99
echo shtml > /proc/sys/net/khttpd/dynamic
100
echo 1 > /proc/sys/net/khttpd/start
101
 
102
   For the second mode of operation, this would be:
103
 
104
#!/bin/sh
105
modprobe khttpd
106
echo 8080 > /proc/sys/net/khttpd/clientport
107
echo 80 > /proc/sys/net/khttpd/serverport
108
echo /var/www > /proc/sys/net/khttpd/documentroot
109
echo php3 > /proc/sys/net/khttpd/dynamic
110
echo shtml > /proc/sys/net/khttpd/dynamic
111
echo 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
 
149
4. 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
 
175
5. 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
 
222
6. 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
 
236
7. 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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.