wm: doc

ref: aaeb28aa8e5cf5a9fb58b4525d724ad4661f5abd
dir: /rc-httpd.ms/

View raw version
This guide explains how to provide a simple setup for rc-httpd to serve
static web pages.

First, copy the template for tcp80 from /bin/service/!tcp80:

cpu% cp (/bin/service/)^(!tcp80 tcp80)

Next, create the FS_ROOT, the directory which is used to serve web documents:

cpu% mkdir -p /usr/$user/www/example.com

Add some files:

cpu% echo "Hello, world!" > /usr/$user/www/example.com/index.html

Put this in /rc/bin/rc-httpd/select-handler:

if(~ $SERVER_NAME example.com){
     PATH_INFO=$location
     FS_ROOT=/usr/$user/www/$SERVER_NAME
     exec static-or-index
}
cpu% chmod +x /rc/bin/rc-httpd/select-handler

This tells rc-httpd to serve static files or an index file upon web requests
with the proper FS_ROOT.

To support TLS:

cpu% cp (/bin/service/)^(!tcp80 tcp443)

Inside /bin/service/tcp443, we put:

#!/bin/rc
exec tlssrv -c /sys/lib/tls/acmed/example.com.crt -r`{cat $3/remote} /rc/bin/rc-httpd/rc-httpd >>[2]/sys/log/www

cpu% chmod +x /bin/service/tcp443

Make sure to store the private key into secstore's factotum, so that
it gets loaded automatically upon boot:

cpu% ramfs -p; cd /tmp
cpu% auth/secstore -g factotum
secstore password:
cpu% cat /sys/lib/tls/acmed/example.com.key >> factotum
cpu% auth/secstore -v -p factotum
secstore password:
cpu% read -m factotum > /mnt/factotum/ctl