| [9] | 1 | httpd documentation 7/16/96 by Michael Temari <Michael@TemWare.Com> | 
|---|
|  | 2 | updated 2003-07-05 by Al Woodhull <awoodhull@hampshire.edu> | 
|---|
|  | 3 |  | 
|---|
|  | 4 | DISCLAIMER: | 
|---|
|  | 5 |  | 
|---|
|  | 6 | Use at own risk etc... | 
|---|
|  | 7 |  | 
|---|
|  | 8 |  | 
|---|
|  | 9 | COMMENTS: | 
|---|
|  | 10 |  | 
|---|
|  | 11 | Please send me any bug reports, comments, questions, etc...  My email | 
|---|
|  | 12 | address is Michael@TemWare.Com | 
|---|
|  | 13 |  | 
|---|
|  | 14 |  | 
|---|
|  | 15 | BACKGROUND: | 
|---|
|  | 16 |  | 
|---|
|  | 17 | httpd is a World Wide Web (WWW) server.  I wrote it from scratch so | 
|---|
|  | 18 | the setup and configuration will not be like other web servers though | 
|---|
|  | 19 | hopefully by reading this document there will be no problems in getting | 
|---|
|  | 20 | my web server up and running on your Minix system. | 
|---|
|  | 21 |  | 
|---|
|  | 22 |  | 
|---|
|  | 23 | COMPILING: | 
|---|
|  | 24 |  | 
|---|
|  | 25 | To compile httpd all you need to do is type "make" in the httpd source | 
|---|
|  | 26 | directory.  There should be no errors or warnings.  If you should run | 
|---|
|  | 27 | out of memory when compiling try adding the -m option to the CFLAGS | 
|---|
|  | 28 | list in the Makefile. | 
|---|
|  | 29 |  | 
|---|
|  | 30 |  | 
|---|
|  | 31 | INSTALLING: | 
|---|
|  | 32 |  | 
|---|
|  | 33 | To install httpd all you need to do is type "make install" in the httpd | 
|---|
|  | 34 | source directory.  By default the place to install httpd is into | 
|---|
|  | 35 | /usr/local/bin.  If you would like to change this then change BINDIR in | 
|---|
|  | 36 | the Makefile.  Httpd will be linked to in.httpd, which is the preferred | 
|---|
|  | 37 | name for a program started by the tcpd internet access control program. | 
|---|
|  | 38 | The program dir2html is also installed -- this provides a directory | 
|---|
|  | 39 | listing when a web client accesses a directory which does not contain a | 
|---|
|  | 40 | file named index.html (or an alternative designated in /etc/httpd.conf). | 
|---|
|  | 41 | The man pages are installed by typing "make installman". | 
|---|
|  | 42 |  | 
|---|
|  | 43 | CONFIGURING: | 
|---|
|  | 44 |  | 
|---|
|  | 45 | Before running httpd it must be configured.  The name of the default | 
|---|
|  | 46 | configuration file is /etc/httpd.conf or you may pass the configuration | 
|---|
|  | 47 | file name to httpd.  Upon starting up, httpd will parse the configuration | 
|---|
|  | 48 | file and then process requests.  This README file and the sample httpd.conf | 
|---|
|  | 49 | may also help in configuring. The httpd.conf.5 man page presents the same | 
|---|
|  | 50 | information for reference use. | 
|---|
|  | 51 |  | 
|---|
|  | 52 |  | 
|---|
|  | 53 | The configuration file is an ascii file which consists of lines of the | 
|---|
|  | 54 | following form: | 
|---|
|  | 55 |  | 
|---|
|  | 56 | directive LWS [parameters separated by LWS] | 
|---|
|  | 57 |  | 
|---|
|  | 58 | NOTE: LWS denotes Linear White Space which is spaces and/or tabs | 
|---|
|  | 59 |  | 
|---|
|  | 60 | The following are valid configuration file directives: | 
|---|
|  | 61 | serverroot user chroot logfile dbgfile dirsend direxec vhost auth | 
|---|
|  | 62 | proxyauth vpath include mtype | 
|---|
|  | 63 |  | 
|---|
|  | 64 | To make the file more readable, on directives which occupy multiple | 
|---|
|  | 65 | lines you may omit the directive on lines after the first and begin | 
|---|
|  | 66 | these lines with LWS. | 
|---|
|  | 67 |  | 
|---|
|  | 68 |  | 
|---|
|  | 69 | serverroot path | 
|---|
|  | 70 |  | 
|---|
|  | 71 | The serverroot directive sets the translation for // to the given path. | 
|---|
|  | 72 |  | 
|---|
|  | 73 |  | 
|---|
|  | 74 | user username | 
|---|
|  | 75 |  | 
|---|
|  | 76 | The user directive causes the server to run as the given username, otherwise | 
|---|
|  | 77 | the server will run as whoever started it (normally root). | 
|---|
|  | 78 |  | 
|---|
|  | 79 |  | 
|---|
|  | 80 | chroot directory | 
|---|
|  | 81 |  | 
|---|
|  | 82 | The chroot directive causes the server to chroot to the given directory after | 
|---|
|  | 83 | the configuration and log files have been opened.  Normally this will be the | 
|---|
|  | 84 | home directory of the given username in the user directive. | 
|---|
|  | 85 | NOTE: /~user will be translated to the home directory of the given user | 
|---|
|  | 86 | // will be translated to the serverroot directory | 
|---|
|  | 87 | NOTE: if this directive is used then beware of the consequences. | 
|---|
|  | 88 |  | 
|---|
|  | 89 |  | 
|---|
|  | 90 | logfile filename | 
|---|
|  | 91 |  | 
|---|
|  | 92 | The logfile directive tells the server where to log http transactions. | 
|---|
|  | 93 | NOTE: the file must exist to enable logging | 
|---|
|  | 94 |  | 
|---|
|  | 95 |  | 
|---|
|  | 96 | dbgfile filename | 
|---|
|  | 97 |  | 
|---|
|  | 98 | The dbgfile directive tells the server where to log debug http transactions. | 
|---|
|  | 99 | NOTE: the file must exist to enable logging | 
|---|
|  | 100 |  | 
|---|
|  | 101 | dirsend filelist | 
|---|
|  | 102 |  | 
|---|
|  | 103 | The dirsend directive tells the server that when a directory is requested | 
|---|
|  | 104 | that it should send the first file that it finds in the directory from the | 
|---|
|  | 105 | filelist for the request. | 
|---|
|  | 106 |  | 
|---|
|  | 107 |  | 
|---|
|  | 108 | direxec program | 
|---|
|  | 109 |  | 
|---|
|  | 110 | The direxec directive tells the server that when a directory is requested | 
|---|
|  | 111 | and no file is found from the dirsend directive that it should run the | 
|---|
|  | 112 | given program. | 
|---|
|  | 113 | NOTE: the program normally generates a directory listing on the fly | 
|---|
|  | 114 | NOTE: the program access is considered X with no access restrictions. | 
|---|
|  | 115 |  | 
|---|
|  | 116 |  | 
|---|
|  | 117 | vhost hostname VhostRoot | 
|---|
|  | 118 |  | 
|---|
|  | 119 | vhost is for defining access for virtual hosts.  If none are configured then | 
|---|
|  | 120 | any host is accepted.  If specified then access is only granted for requests | 
|---|
|  | 121 | for hosts which are configured here.  In the Vpath section below the /// gets | 
|---|
|  | 122 | translated to the corresponding VhostRoot. | 
|---|
|  | 123 |  | 
|---|
|  | 124 |  | 
|---|
|  | 125 | auth authname authdescription access [passwdfile [users]] | 
|---|
|  | 126 |  | 
|---|
|  | 127 | The auth directive sets up different authorizations with the server.  The | 
|---|
|  | 128 | authname is the name given to the authorization and is case insensitive. | 
|---|
|  | 129 | The authdescription is the description of the authorization and is what | 
|---|
|  | 130 | the user will see when asked to enter a username and password.  The | 
|---|
|  | 131 | access is one or more of (rwx).  R tells the server the url can be | 
|---|
|  | 132 | read.  W tells the server the url can be overwritten.  X tells the server | 
|---|
|  | 133 | that the url can and should be executed.  Access is in addition to normal | 
|---|
|  | 134 | unix security considerations.  For instance a file that can be written to | 
|---|
|  | 135 | that does not have the W access will have an error returned.  The | 
|---|
|  | 136 | passwdfile is the name of the passwdfile to validate users against.  If | 
|---|
|  | 137 | the passwdfile is given as '.' then the system password file will be used | 
|---|
|  | 138 | which is /etc/passwd.  If no passwdfile is given then no authorization is | 
|---|
|  | 139 | allowed for anyone.  If no users are given then any validated users is | 
|---|
|  | 140 | authorized, otherwise only the given users are allowed. | 
|---|
|  | 141 |  | 
|---|
|  | 142 |  | 
|---|
|  | 143 | proxyauth authname authdescription access [passwdfile [users]] | 
|---|
|  | 144 |  | 
|---|
|  | 145 | proxyauth defines any access authorization to be used for Proxy access | 
|---|
|  | 146 | authname = Same as auth above | 
|---|
|  | 147 | authdescription = Same as auth above | 
|---|
|  | 148 | access = Must be R to allow proxy | 
|---|
|  | 149 | passwdfile = Same as auth above | 
|---|
|  | 150 | users = Same as auth above | 
|---|
|  | 151 |  | 
|---|
|  | 152 |  | 
|---|
|  | 153 | vpath from to [auth [access]] | 
|---|
|  | 154 |  | 
|---|
|  | 155 | The vpath directive sets up url path translations and authorizations.  A | 
|---|
|  | 156 | requested url that matches from will be translated to to with the given | 
|---|
|  | 157 | auth and access.  If auth does not exist then the url will have no access. | 
|---|
|  | 158 | If access is not given then the access is taken from the auth record (see | 
|---|
|  | 159 | above).  A '.' in place of the to means that the server should use a | 
|---|
|  | 160 | translation from another vpath record, but associate the given auth and | 
|---|
|  | 161 | access with the requested url.  A '*' maybe at the end only of the from | 
|---|
|  | 162 | which is a wildcard match.  For example if the from has /AB* then any of | 
|---|
|  | 163 | /ABCDEF or /AB or /ABmichael will match, but /AD or /a will not.  The | 
|---|
|  | 164 | requested url is first checked against each vpath record until an exact | 
|---|
|  | 165 | match (meaning url match from and from had no '*') is found or the end of | 
|---|
|  | 166 | the list.  Therefore a wildcard match will match the last from is the list | 
|---|
|  | 167 | in which it matched. | 
|---|
|  | 168 | NOTE: if at the beginning of the to field | 
|---|
|  | 169 | /~user will get translated to the home directory of the given user | 
|---|
|  | 170 | // wile get translated to the serverroot directory | 
|---|
|  | 171 |  | 
|---|
|  | 172 |  | 
|---|
|  | 173 | include filename | 
|---|
|  | 174 |  | 
|---|
|  | 175 | The include directive tells the server to read configuration information | 
|---|
|  | 176 | from the given filename. | 
|---|
|  | 177 | NOTE: normally mtype directives are included from another file | 
|---|
|  | 178 |  | 
|---|
|  | 179 |  | 
|---|
|  | 180 | mtype mimetype extensions | 
|---|
|  | 181 |  | 
|---|
|  | 182 | The mtype directive tells the server what mimetype to associate with files | 
|---|
|  | 183 | which have any of the given extensions.  If no match is found then the file | 
|---|
|  | 184 | will be treated as application/octet-stream. | 
|---|
|  | 185 | NOTE: normally you get mtype directives in included file | 
|---|
|  | 186 |  | 
|---|
|  | 187 |  | 
|---|
|  | 188 |  | 
|---|
|  | 189 | USAGE: | 
|---|
|  | 190 |  | 
|---|
|  | 191 | httpd [-v|-t] [configuration-file] | 
|---|
|  | 192 |  | 
|---|
|  | 193 | The -t tells the server to just parse the configuration file so that you | 
|---|
|  | 194 | can test it to see if it is the way you want it.  You may also pass the | 
|---|
|  | 195 | name of your configuration file if it is not the default /etc/httpd.conf. | 
|---|
|  | 196 |  | 
|---|
|  | 197 | The -v option prints the server version and then exits. | 
|---|
|  | 198 |  | 
|---|
|  | 199 |  | 
|---|
|  | 200 | STARTING: | 
|---|
|  | 201 |  | 
|---|
|  | 202 | First of all httpd is a server and therefore you will need to start it | 
|---|
|  | 203 | with tcpd.  Tcpd is a program which listens for incoming TCP connections | 
|---|
|  | 204 | on the passed port and when a connection comes in it forks and starts the | 
|---|
|  | 205 | given daemon program.  Therefore to start httpd you use: | 
|---|
|  | 206 |  | 
|---|
|  | 207 | tcpd http /usr/local/bin/in.httpd & | 
|---|
|  | 208 |  | 
|---|
|  | 209 | You will more than likely have this line in your /etc/rc or /etc/rc.net | 
|---|
|  | 210 | file so that whenever your system is restarted the web server will also | 
|---|
|  | 211 | be started.  The first parameter http is the port that tcpd is going | 
|---|
|  | 212 | to be listening for connections on.  Here http (which should be defined | 
|---|
|  | 213 | in /etc/services as 80) is the standard port for a web server.  The second | 
|---|
|  | 214 | parameter is the program that tcpd will fork and exec when a connection | 
|---|
|  | 215 | comes in.  The program will then have its stdin and stderr connected to | 
|---|
|  | 216 | the client  Then the web server program will start running with the tcpd | 
|---|
|  | 217 | program waiting for the next connection.  Currently there is no ability to | 
|---|
|  | 218 | limit the number of simultaneous web servers running.  NOTE: At some point | 
|---|
|  | 219 | I will be adding the ability for httpd to start itself without the need of | 
|---|
|  | 220 | tcpd.  That way httpd will already be in memory and have parsed its | 
|---|
|  | 221 | configuration file. | 
|---|
|  | 222 |  | 
|---|
|  | 223 | In Minix 2.0.3 and later versions you may use: | 
|---|
|  | 224 |  | 
|---|
|  | 225 | daemonize tcpd http /usr/local/bin/in.httpd | 
|---|
|  | 226 |  | 
|---|
|  | 227 | (daemonize is a shell function defined in /usr/etc/rc which starts programs | 
|---|
|  | 228 | as daemons). | 
|---|
|  | 229 |  | 
|---|
|  | 230 |  | 
|---|
|  | 231 | FINAL WORDS | 
|---|
|  | 232 |  | 
|---|
|  | 233 | I wanted to get the server out as soon as possible so I hurried up and | 
|---|
|  | 234 | created this document to help out.  Hopefully it will HELP more than | 
|---|
|  | 235 | it HURTS.  If anyone is interested in writing man pages for httpd or any | 
|---|
|  | 236 | of the other network programs please let me know. | 
|---|
|  | 237 |  | 
|---|
|  | 238 |  | 
|---|
|  | 239 | Michael Temari | 
|---|
|  | 240 | Michael@TemWare.Com | 
|---|
|  | 241 |  | 
|---|
|  | 242 | Please note also the SECURITY document in this directory. (asw 2003-07-05) | 
|---|