README
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

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 or 
  13.    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"-operation.
  18.    This can be done very efficiently from within the Linux-kernel, for example 
  19.    the nfs (network file system) daemon performs a similar task and also runs 
  20.    in the kernel.
  21.    By "accelerating" the simple case within the kernel, userspace daemons can
  22.    do what they are very good at: Generating user-specific, dynamic content.
  23.    Note: This document sometimes uses "Apache" instead of "any webserver you
  24.    ever might want to use", just for reasons of readability.
  25.    
  26. 2. Quick Start  
  27. --------------
  28.    1) compile and load the module
  29.    2) configure the module in /proc/sys/net/khttpd if needed
  30.    3) echo 1 > /proc/sys/net/khttpd/start
  31.    unloading:
  32.  
  33.    echo 1 > /proc/sys/net/khttpd/stop
  34.    echo 1 > /proc/sys/net/khttpd/unload 
  35.    rmmod khttpd
  36.    
  37. 3. Configuration 
  38. ----------------
  39.    Modes of operation
  40.    ==================
  41.    There are two recommended modes of operation:
  42.    1) "Apache" is main webserver, kHTTPd is assistant
  43. clientport   -> 80
  44.    serverport   -> 8080 (or whatever)
  45.    2) kHTTPd is main webserver, "Apache" is assistant
  46. clientport   -> 8080 (or whatever)
  47.   serverport   -> 80
  48.    
  49.    Configuring kHTTPd
  50.    ==================
  51.    Before you can start using kHTTPd, you have to configure it. This
  52.    is done through the /proc filesystem, and can thus be done from inside
  53.    a script. Most parameters can only be set when kHTTPd is not active.
  54.    The following things need configuration:
  55.    1) The port where kHTTPd should listen for requests
  56.    2) The port (on "localhost") where "Apache" is listening
  57.    3) The location of the documents (documentroot)
  58.    4) The strings that indicate dynamic content (optional)
  59.       [  "cgi-bin" is added by default ]
  60.    It is very important that the documentroot for kHTTPd matches the
  61.    documentroot for the userspace-daemon, as kHTTPd might "redirect"
  62.    any request to this userspace-daemon.
  63.    A typical script (for the first mode of operation) to do this would 
  64.    look like:
  65. #!/bin/sh
  66. modprobe khttpd
  67. echo 80 > /proc/sys/net/khttpd/clientport
  68. echo 8080 > /proc/sys/net/khttpd/serverport
  69. echo /var/www > /proc/sys/net/khttpd/documentroot
  70. echo php3 > /proc/sys/net/khttpd/dynamic
  71. echo shtml > /proc/sys/net/khttpd/dynamic
  72. echo 1 > /proc/sys/net/khttpd/start
  73.    For the second mode of operation, this would be:
  74. #!/bin/sh
  75. modprobe khttpd
  76. echo 8080 > /proc/sys/net/khttpd/clientport
  77. echo 80 > /proc/sys/net/khttpd/serverport
  78. echo /var/www > /proc/sys/net/khttpd/documentroot
  79. echo php3 > /proc/sys/net/khttpd/dynamic
  80. echo shtml > /proc/sys/net/khttpd/dynamic
  81. echo 1 > /proc/sys/net/khttpd/start
  82.    In this case, you also have to change the configuration of the 
  83.    userspace-daemon. For Apache, you do this by changing
  84.    Port 80
  85.    to 
  86.    Port 8080
  87.    
  88.    Stopping kHTTPd
  89.    ===============
  90.    In order to change the configuration, you should stop kHTTPd by typing
  91.    echo 1 > /proc/sys/net/khttpd/stop
  92.    on a command-prompt.
  93.    If you want to unload the module, you should type
  94.    echo 1 > /proc/sys/net/khttpd/unload
  95.    after stopping kHTTPd first.
  96.    If this doesn't work fast enough for you (the commands above can wait for 
  97.    a remote connection to close down), you can send the daemons a "HUP"
  98.    signal after you told them to stop. This will cause the daemon-threads to
  99.    stop immediately. 
  100.    Note that the daemons will restart immediately if they are not told to
  101.    stop.
  102.    
  103. 4. Permissions
  104. --------------
  105.    The security model of kHTTPd is very strict. It can be, since there is a 
  106.    userspace daemon that can handle the complex exceptions. 
  107.    kHTTPd only serves a file if
  108. 1)  There is no "?" in the URL
  109. 2)  The URL starts with a "/"
  110. 3)  The file indicated by the URL exists
  111. 4)  The file is world-readable (*)
  112. 5)  The file is not a directory, executable or has the Sticky-bit
  113.     set (*)
  114. 6)  The URL doesn't contain any "forbidden" substrings such as ".."
  115.     and "cgi-bin" (*)
  116. 7)  The mime-type is known (*)
  117.    The items marked with a (*) are configurable through the
  118.    sysctl-parameters in /proc/sys/net/khttpd.
  119.    In all cases where any of the above conditions isn't met, the
  120.    userspace-daemon is handed the request.
  121. 5. Parameters
  122. -------------
  123.    The following parameters are settable through /proc/sys/net/khttpd:
  124.  
  125. Name Default Description
  126. serverport 8080 The port where kHTTPd listens on
  127. clientport 80 The port of the userspace
  128. http-daemon
  129. threads 2 The number of server-threads. Should
  130. be 1 per CPU for small websites, 2
  131. per CPU for big (the active files
  132. do not fit in the RAM) websites.
  133. documentroot /var/www the directory where the
  134. document-files are
  135. start 0 Set to 1 to start kHTTPd 
  136. (this also resets "stop" to 0)
  137. stop 0 Set to 1 to stop kHTTPd
  138. (this also resets "start" to 0)
  139. unload 0 Set to 1 to prepare kHTTPd for
  140. unloading of the module
  141. sloppymime 0 If set to 1, unknown mime-types are
  142. set to text/html. If set to 0,
  143. files with unknown mime-types are
  144. handled by the userspace daemon
  145. perm_required S_IROTH Minimum permissions required
  146. (for values see "man 2 stat")
  147. perm_forbid dir+sticky+ Permission-mask with "forbidden"
  148. execute permissions.
  149. (for values see "man 2 stat")
  150. dynamic cgi-bin .. Strings that, if they are a subset
  151. of the URL, indicate "dynamic
  152. content"
  153. maxconnect 1000 Maximum number of concurrent
  154. connections
  155. 6. More information
  156. -------------------
  157.    More information about the architecture of kHTTPd, the mailinglist and
  158.    configuration-examples can be found at the kHTTPd homepage:
  159. http://www.fenrus.demon.nl
  160.    Bugreports, patches, etc can be send to the mailinglist
  161.    (khttpd-users@zgp.org) or to khttpd@fenrus.demon.nl