RC-HTTPD(8)                                           RC-HTTPD(8)

     NAME
          rc-httpd - HTTP server

     SYNOPSIS
          rc-httpd/rc-httpd

     DESCRIPTION
          Rc-httpd serves the requested file or an index of files
          found under a website's root directory, or, in the case of
          CGI, executes a specified CGI program.

     CONFIGURATION
          As all pieces of rc-httpd are shell scripts, configuration
          is achieved by setting variables and adding, removing or
          modifying commands in various files.

          rc-httpd

          rc_httpd_dir must be set to the root of the rc-httpd instal-
          lation, the directory containing the rc-httpd script.

          path must include rc_httpd_dir/handlers ahead of the base
          system's path elements.

          cgi_path is substituted for path when cgi scripts are run.
          (Be sure to set path back in rc-based cgi scripts.)

          extra_headers is an optional list of strings to emit when
          sending http headers.

          SERVER_PORT is the port HTTP is to be served on.

          select-handler

          PATH_INFO is the location relative to the website's root
          directory of the file to be displayed.  Typically, the
          location from the incoming request is honored.

          FS_ROOT sets the root directory of the website.

          NOINDEXFILE instructs the dir-index module not to look for
          index.html files, otherwise if an index.html file is found
          dir-index will exec serve-static to serve the file.  At pre-
          sent there is no module to serve an index file but not a
          directory.

          If you do not want directory indexing at all, replace
          static-or-index with serve-static, which will report 503
          forbidden for directories.

     Page 1                       Plan 9             (printed 3/28/24)

     RC-HTTPD(8)                                           RC-HTTPD(8)

          Multiple virtual hosts may be configured by creating condi-
          tional statements that act upon the SERVER_NAME variable.
          Fine-grained control of specific request strings may be con-
          figured via a similar method acting upon the location and/or
          other variables.

     EXAMPLES
          The following examples demonstrate possible ways to config-
          ure select-handler.

          Serve static files:
               if(~ $SERVER_NAME 9front.org){
                    PATH_INFO=$location
                    FS_ROOT=/usr/sl/www/$SERVER_NAME
                    exec static-or-index
               }

          CGI:
               if(~ $SERVER_NAME *cat-v.org){
                    PATH_INFO=$location
                    FS_ROOT=/usr/sl/www/werc/sites/$SERVER_NAME
                    exec static-or-cgi /usr/sl/www/werc/bin/werc.rc
               }

          Custom error message for a denied URL:
               fn do_error{
                    do_log $1
                    echo 'HTTP/1.1 '^$1^$cr
                    emit_extra_headers
                    echo 'Content-type: text/html'^$cr
                    echo $cr
                    echo '<html>
               <head>
               <title>'^$1^'</title>
               </head>
               <body>
               <h1>'^$1^'</h1>'
                    echo $2
                    echo '<p><i>rc-httpd at' $SERVER_NAME '</i>'
                    echo '
                    </body>
                    </html>
                    '
               }
               if(~ $location /v8.tar.bz2){
                    do_error '27b/6'
                    exit
               }

     STARTUP
          Rc-httpd is run from a file in the directory scanned by
          listen(8), or called as an argument to aux/listen1.  The

     Page 2                       Plan 9             (printed 3/28/24)

     RC-HTTPD(8)                                           RC-HTTPD(8)

          program's standard error may be captured to a log file:
               exec /rc/bin/rc-httpd/rc-httpd >>[2]/sys/log/www

     FILES
          /rc/bin/rc-httpd/rc-httpd
          /rc/bin/rc-httpd/select-handler
          /rc/bin/rc-httpd/handlers/cgi
          /rc/bin/rc-httpd/handlers/dir-index
          /rc/bin/rc-httpd/handlers/error
          /rc/bin/rc-httpd/handlers/redirect
          /rc/bin/rc-httpd/handlers/serve-static
          /rc/bin/rc-httpd/handlers/static-or-cgi
          /rc/bin/rc-httpd/handlers/static-or-index
          /rc/bin/service/tcp80
          /sys/log/www

     SOURCE
          /rc/bin/rc-httpd

     SEE ALSO
          rc(1), listen(8)

     HISTORY
          Rc-httpd first appeared in 9front (February, 2013).

     Page 3                       Plan 9             (printed 3/28/24)