README
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:7k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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