httpd.1
上传用户:lampled
上传日期:2007-01-07
资源大小:94k
文件大小:20k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. .TH HTTPD 1 "25 March 1996"
  2. .SH NAME
  3. httpd - WWW server conforming to HTTP/1.0
  4. .SH SYNOPSIS
  5. .ta 8n
  6. .B httpd
  7. [
  8. .I options
  9. ]
  10. .LP 
  11. .SH DESCRIPTION OF HTTPD
  12. What is XS-HTTPD? XS-HTTPD is a WWW server that has the following features:
  13. .TP
  14. o
  15. It is pronounced as "access-HTTP-daemon"
  16. .TP
  17. o
  18. It is SMALL (very small in fact: a factor two to three smaller than
  19. normal servers on disk and in memory)
  20. .TP
  21. o
  22. It is FAST (because it is so small and does not do
  23. unnecessary things)
  24. .TP
  25. o
  26. Uses very little CPU time
  27. .TP
  28. o
  29. Configurable (configuration compiled in to make it small, but
  30. largely overridable on the command line)
  31. .TP
  32. o
  33. Runs user CGI binaries under their fIownfP user ID!
  34. .TP
  35. o
  36. Gets users' pages under their own user ID, allowing them to
  37. really have protected pages (using the built-in authentication
  38. mechanism)!
  39. .TP
  40. o
  41. Does not fork for every connection (has a fixed number of
  42. servers), only to replace a lost server (in case of timeouts).
  43. .TP
  44. o
  45. Comes with some other useful programs
  46. .LP
  47. .SH RUNNING THE HTTPD
  48. Note that if you are going to use a port number below or equal to 1024
  49. (for example 80, the default port number), you will have to be
  50. .I root
  51. to start the WWW server. Also, if you want users'
  52. CGI binaries to be executed under their own user ID, you will have to
  53. start the WWW server as root.
  54. The server has a number of options:
  55. .TP
  56. .B -p portnumber
  57. Uses port number
  58. .B portnumber
  59. instead of the default (the factory default is 80).
  60. .TP
  61. .B -u username
  62. Runs the server under fBusernamefP's user id
  63. instead of the default (the factory default is nobody).
  64. .TP
  65. .B -g groupname
  66. Runs the server under fBgroupnamefP's group id
  67. instead of the default (the factory default is nogroup).
  68. .TP
  69. .B -n number
  70. Uses fBnumberfP as the number of servers to
  71. start (the factory default is 20).
  72. .TP
  73. .B -d rootdir
  74. Uses fBrootdirfP as the base directory for other
  75. directories like the logs directory, the htdocs
  76. directory and the cgi-bin directory. The factory default
  77. is /usr/local/lib/httpd.
  78. .TP
  79. .B -r referdomain
  80. Uses fBreferdomainfP as the "refer-ignore-domain".
  81. References coming from this domain will not be logged in the
  82. refer_log. This is usually your own domain. Note that
  83. it is wise to start the domain with a dot (.). You may also
  84. give a machine name instead of a domain name.
  85. .TP
  86. .B -l localmode
  87. Uses fBlocalmodefP as the parameter to transform_user_dir().
  88. This way, you can build different options into your local
  89. configuration. Not recommended for non-experts.
  90. .TP
  91. .B -a address
  92. Uses fBaddressfP as the internet address to listen
  93. on. This is very handy on "multi-homing" server with multiple
  94. interfaces. Uses this option, you can place servers with different
  95. functionality on different interfaces. This name is also used for
  96. redirecting requests back to this host. Therefore, you must use
  97. a "full" (complete with the host's name and the domain) internet
  98. address, otherwise remote hosts will not be able to resolve the name.
  99. .TP
  100. .B -m service-message
  101. If you give this option to the server, it will not function as it normally
  102. would. Instead of supplying documents, all it will do is display the
  103. fBservice-messagefP. This is very useful to at least give users an idea
  104. of what you are doing when the server is temporarily out of order.
  105. Remember that if you are supplying an entire
  106. sentence, then you have to enclose that sentence in quotes (").
  107. .TP
  108. .B -A access-log-path
  109. If you give this option to the server, you will override the default
  110. file in which the server will place all retrieved files.
  111. .TP
  112. .B -E error-log-path
  113. If you give this option to the server, you will override the default
  114. file in which the server will place all error messages.
  115. .TP
  116. .B -R referer-log-path
  117. If you give this option to the server, you will override the default
  118. file in which the server will place references to local files.
  119. .LP
  120. .SH EXAMPLE
  121. A typical startup sequence could be:
  122. .LP
  123. httpd -n 64 -u http -g www -r .stack.nl -l 2
  124. .LP
  125. which will start 64 servers (64 concurrent connections possible),
  126. and run it under user ID http and group ID www.
  127. It will ignore any references coming from *.stack.nl
  128. and it will pass 2 as a parameter to fBtransform_user_dirfP.
  129. .SH Other features
  130. .SH Automatic decompression
  131. One of the nice features of the WWW server is automatic decompression.
  132. This feature is dealt with in the file called fBcompress.methodsfP.
  133. .LP
  134. This file lists the possible compression types that are understood by the
  135. WWW server. It works very simply: if somebody asks for (for example)
  136. fBindex.htmlfP, and this file does not exist, but
  137. fBindex.html.gzfP does exist, then fBindex.htmlfP will be
  138. `generated' out of fBindex.html.gzfP using the method
  139. specified with fB.gzfP. Note that this process does not actually
  140. create fBindex.htmlfP in that same directory. It creates a file
  141. in the temporary directory, which is removed immediately after usage.
  142. .LP
  143. If somebody asks directly for fBindex.html.gzfP, he will get it
  144. in the compressed format. This way, nice things like the following can
  145. be done:
  146. .LP
  147. fBGet <A HREF="xshttpd.tar">the uncompressed
  148. tar</A>, or get the <A HREF="xshttpd.tar.gz">the compressed tar</A>.fP
  149. .LP
  150. The user only has to have the compressed version, because if somebody
  151. asks for the uncompressed version, the server will uncompress it on the
  152. fly for that user.
  153. .LP
  154. Note that only one compression type per file is possible. Of course, you
  155. can make frontends for types that require multiple filters. In that case,
  156. it can be helpful to know that the list is traversed from top to bottom.
  157. .SH Authentication
  158. This server supports the fIbasicfP authentication protocol. This
  159. means that users can protect their pages with a username/password
  160. combination. Other servers can do this too, but they lack one thing:
  161. the "protected" files have to be world-readable. Because this server
  162. retrieves pages under users' own UID, this problem is avoided.
  163. .LP
  164. More information about authentication can be found in the manual pages
  165. of fBxspasswdfP and fBxschpassfP.
  166. .SH Special files
  167. There are a number of files that this WWW server considers special:
  168. .TP
  169. fB .noxsfP
  170. If this file exists in a certain directory, that entire
  171. directory is considered closed. If somebody attempts to
  172. retrieve a file from that directory, he will get a
  173. fIPermission deniedfP notice. This is useful for
  174. users and system administrators: users can use it when
  175. they are updating the directory and system administrators
  176. can use it to easily shut down a group of pages.
  177. Note that only the directory in which the file is present
  178. is blocked. Subdirectories are fInotfP blocked.
  179. .TP
  180. fB .xsuidfP
  181. If this file exists in a certain directory, all files in that
  182. directory will be retrieved as (by default) nobody/nogroup
  183. instead of under your own UID. This can be useful if you want
  184. a file permission of say 600 to mean: do not allow retrieval
  185. (by default, the file is retrieved under your own UID, so the
  186. daemon could have still read those files).
  187. .TP
  188. fB .redirfP
  189. If this file is present in a certain directory, and a file
  190. is requested from that directory, then a redirection message
  191. will be sent to the remote user's browser. It works simply
  192. by substituting the server name and the directory that the
  193. remote user to get to this file by the contents of the file.
  194. This way, an entire directory can be automatically be redirected.
  195. .TP
  196. fB *.redirfP
  197. If a file is requested and a file exists with the same name
  198. but with fB.redirfP appended to it, the file will not be
  199. sent. Instead, the server will send a redirection message to
  200. the remote user's browser. The redirected location is retrieved
  201. from the fB*.redirfP file.
  202. .TP
  203. fB .xsauthfP
  204. If this file exists, all files in that directory (NOT the
  205. subdirectories) are protected by usercode/password
  206. combinations. Read the manual page of xspasswd for more
  207. details about this.
  208. .LP
  209. .SH XS-HTTPD SSI's
  210. One of the most advanced features of this WWW server is its
  211. server side includes. Server side includes (SSI's) are "commands"
  212. to the server to do something. These may be embedded in HTML
  213. documents.
  214. .LP
  215. The format of such a directive is as follows:
  216. .br
  217. fB<!--#fPfInamefP
  218. fB[fPfIargument(s)fPfB]fPfB-->fP
  219. .LP
  220. fInamefP is the name of the directive. You may specify
  221. fIargumentsfP
  222. to the directive if needed or wanted, seperated from the directive's
  223. name by fBonefP space. Note also that a directive must
  224. start and end on the same line. You may have other things on that
  225. line, including other directives.
  226. .LP
  227. When the server sends a HTML document to the remote client, it will
  228. parse all of the directives that are embedded in that document.
  229. The possible directives are:
  230. .TP
  231. fBcount-totalfP
  232. This directive inserts the number of times that this page has
  233. ever been retrieved. You may use counters as many times as you
  234. wish per page, they will only increment once.
  235. .TP
  236. fBcount-monthfP
  237. This directive inserts the number of times that this page has
  238. been retrieved this month.
  239. .TP
  240. fBcount-todayfP
  241. This directive inserts the number of times that this page has
  242. been retrieved today.
  243. .TP
  244. fBcount-total-gfxfP fB[fPfIlocationfPfB]fP
  245. This directive inserts a HTML tag to include a graphical
  246. representation of the number of times that this page has
  247. ever been retrieved. If fIlocationfP is specified,
  248. it will be used as a base location for the font. A font
  249. has 10 digits in it, each in a seperate file, all PPM's.
  250. Say location is fB/~user/font1fP, and digit fB1fP
  251. is needed, then fP/~user/font1/1.ppmfP will be used as
  252. that digit.
  253. Two default fonts are supplied with this WWW server. They may
  254. be accessed using the fBlocationfPs: fI/fonts/digitalfP
  255. and fI/fonts/largefP.
  256. .TP
  257. fBcount-month-gfxfP fB[fPfIlocationfPfB]fP
  258. This directive inserts a HTML tag to include a graphical
  259. representation of the number of times that this page has
  260. been retrieved this month. See above for fIlocationfP.
  261. .TP
  262. fBcount-today-gfxfP fB[fPfIlocationfPfB]fP
  263. This directive inserts a HTML tag to include a graphical
  264. representation of the number of times that this page has
  265. been retrieved today. See above for fIlocationfP.
  266. .TP
  267. fBdatefP
  268. This directive inserts the current date and time, optionally
  269. in your own format. You can specify your own date and time
  270. format using the fBdate-formatfP directive (see
  271. below).
  272. .TP
  273. fBdate-formatfP fIformatfP
  274. This directive uses fIformatfP as the new date and time
  275. format. You must specify the format in strftime(3) format.
  276. Type fBman strftimefP for help on how to
  277. use this format.
  278. .TP
  279. fBinclude-filefP fIfilefP
  280. This directive allows you to include another fIfilefP in this
  281. document. Very useful for standard headers and footers. Note that
  282. included files may be nested and that directives are parsed in them.
  283. Note also that counters and such always count the
  284. fBoriginalfP file, so you can use the
  285. fBcount-*fP directives in your standard headers and
  286. footers.
  287. .TP
  288. fBlast-modfP
  289. fB[fPfIfilefPfB]fP
  290. This directive (with a pseudonym fBlast-modifiedfP
  291. inserts the last modification date of either the originally
  292. request file (the current document) or the optionally specified
  293. fIfilefP. The date will be in the format specified by the
  294. fBdate-formatfP directive.
  295. .TP
  296. fBremote-hostfP
  297. Inserts the name (or the IP number if the name cannot be resolved)
  298. of the remote computer that is asking for this document.
  299. .TP
  300. fBrun-cgifP fIcgifP
  301. Runs the CGI binary fIcgifP and inserts its output at this
  302. point. Standard fBPATH_INFOfP and
  303. fBPATH_TRANSLATEDfP parsing is done, so you can give
  304. argumens to the CGI binary. All standard CGI environment variables
  305. will be set up appriopriately. See the CGI section
  306. for more details on CGI's.
  307. .TP
  308. fBagent-shortfP
  309. This directive inserts the name of the browser that the remote
  310. user is using in the short version (i.e. without the version number).
  311. Note that Netscape is displayed as Mozilla, which is Netscape's
  312. real name.
  313. .TP
  314. fBagent-longfP
  315. This directive inserts the name of the browser that the remote
  316. user is using in the long version (i.e. with version numbers and
  317. other comments that the browser sends).
  318. .TP
  319. fBiffP fIkeywordfP fIpattern(s)fP
  320. The following four directive are the most powerful: they allow
  321. a kind of flow control in your documents. This directive
  322. displays all text and directives after it until it encounters
  323. an fBendiffP or a fBelsefP directive,
  324. if the query evaluates to true.
  325. .LP
  326. Possible fIkeywordsfP are:
  327. .TP
  328. fBbrowserfP
  329. If any of the fIpatternsfP match the browser name
  330. that the remote user if using, the query evaluates to true,
  331. otherwise it evaluates to false. See below on how to specify
  332. patterns.
  333. .TP
  334. fBremote-hostfP
  335. If any of the fIpatternsfP match the remote host's
  336. name or IP number, the query evaluates to true,
  337. otherwise it evaluates to false.
  338. .TP
  339. fBremote-namefP
  340. If any of the fIpatternsfP match the remote host's name,
  341. the query evaluates to true, otherwise it evaluates to false.
  342. .TP
  343. fBremote-addrfP
  344. If any of the fIpatternsfP match the remote host's
  345. IP number, the query evaluates to true, otherwise it
  346. evaluates to false.
  347. .TP
  348. fBargumentfP
  349. It is possible (since version 2.1) to pass arguments to
  350. HTML documents. If any of the fIpatternsfP match the
  351. given argument, the query evaluates to true, otherwise it
  352. evaluates to false.
  353. .LP
  354. Arguments are passed by appending a question mark to the
  355. page's URL and giving the arguments after that. For
  356. example:
  357. .br
  358. fBhttp://www.foo.bar/~test/blah.html?this_is_an_argumentfP
  359. Patterns are simple wildcard patterns (case-insensitive).
  360. For example, to match any version of Netscape (which is really
  361. called Mozilla), you would use fBmozilla/*fP.
  362. If you want to match any Mosaic version 2, you would use
  363. fB*Mosaic*/2*fP.
  364. .LP
  365. A browser's name is always constructed in the following way:
  366. .br
  367. fIbrowsernamefPfB/fPfIversionfP
  368. fIextrafPfB/fPfIversionfP
  369. .TP
  370. fBif-notfP fIkeywordfP fIpattern(s)fP
  371. This does exactly the same as fBiffP, except that
  372. it displays the following text only if the query evaluates to
  373. false instead of true.
  374. .TP
  375. fBelsefP
  376. This can be used after an fBiffP or
  377. fBif-notfP directive. The meaning is obvious.
  378. .TP
  379. fBendiffP
  380. Ends an fBiffP or fBnot-iffP. Note that
  381. these constructions may be nested!
  382. .LP
  383. .SH CGI binaries
  384. The server, as of version 2.0, supports running system and user CGI
  385. binaries. This means that anyone can run their own CGI binaries.
  386. What is different about this server is that it runs users' CGI binaries
  387. under their own user ID. This means that they have full access to their
  388. files - they can read/write/update any file that they own.
  389. .LP
  390. CGI binaries must be in the directory named fBcgi-binfP which
  391. must be in either the WWW server's virtual / or in the user's
  392. WWW directory (see the local configuration
  393. section about a user's WWW directory). Since version 2.2, CGI binaries
  394. can be in subdirectories of the fBcgi-binfP directory.
  395. .LP
  396. The server is completely CGI/1.1 compliant (except that it cheats with
  397. local file redirections). You can read about the CGI specification at
  398. NCSA's WWW site.
  399. .LP
  400. Supported environment variables are:
  401. .TP
  402. .B SERVER_SOFTWARE
  403. The name and version of the xs-httpd that started the binary.
  404. Format: xs-httpd/version
  405. .TP
  406. .B SERVER_NAME
  407. The server's hostname, DNS alias, or IP address as it would appear
  408. in self-referencing URLs.
  409. .TP
  410. .B GATEWAY_INTERFACE
  411. The revision of the CGI specification to which this server
  412. complies. Format: CGI/revision
  413. .TP
  414. .B SERVER_PROTOCOL
  415. The name and revision of the information protcol this request came
  416. in with. Format: protocol/revision
  417. .TP
  418. .B SERVER_PORT
  419. The port number to which the request was sent.
  420. .TP
  421. .B REQUEST_METHOD
  422. The method with which the request was made. For HTTP, this is
  423. "GET", "HEAD", "POST", etc.
  424. .TP
  425. .B PATH_INFO
  426. The extra path information, as given by the client. In other
  427. words, scripts can be accessed by their virtual pathname, followed
  428. by extra information at the end of this path. The extra
  429. information is sent as PATH_INFO. This information is
  430. decoded by the server if it comes from a URL before it is passed
  431. to the CGI script.
  432. .TP
  433. .B PATH_TRANSLATED
  434. The server provides a translated version of PATH_INFO, which takes
  435. the path and does any virtual-to-physical mapping to it.
  436. .TP
  437. .B SCRIPT_NAME
  438. A virtual path to the script being executed, used for
  439. self-referencing URLs.
  440. .TP
  441. .B QUERY_STRING
  442. The information which follows the ? in the URL which referenced
  443. this script. This is the query information. It will not be
  444. decoded in any fashion. This variable is always set when
  445. there is query information, regardless of command line decoding.
  446. .TP
  447. .B REMOTE_HOST
  448. The hostname making the request. If the server does not have this
  449. information, it will set REMOTE_ADDR and leave this unset.
  450. .TP
  451. .B REMOTE_ADDR
  452. The IP address in text of the remote host making the request.
  453. .TP
  454. .B AUTH_TYPE
  455. If the server supports user authentication, and the script is
  456. protected, this is the protocol-specific authentication method used
  457. to validate the user.
  458. .TP
  459. .B REMOTE_USER
  460. If the the script is protected, this is the username the remote
  461. user has authenticated with.
  462. .TP
  463. .B REMOTE_PASSWORD
  464. If the the script is protected, this is the password the remote
  465. user used.
  466. .TP
  467. .B CONTENT_TYPE
  468. For queries which have attached information, such as HTTP POST and
  469. PUT, this is the content type of the data.
  470. .TP
  471. .B CONTENT_LENGTH
  472. The length of the said content as given by the client.
  473. .LP
  474. XS-HTTPD has one enhancement on the CGI specifications. It doesn't only
  475. support the fBnph-fP naming convention (No Parse Headers), but
  476. also the fBnid-fP naming convention (to use both, first put
  477. fBnph-fP and then fBnid-fP). This makes the CGI binary run
  478. under (by default) nobody/nogroup, instead of the user's own UID.
  479. For example, if you name your CGI binary fInid-form.cgifP,
  480. it will run that binary under nobody/nogroup instead of your own
  481. UID (this is to protect yourself from accidental damage).
  482. .LP
  483. There is one fIreservedfP CGI binary name known as fBerrorfP.
  484. This binary gets called whenever something goes wrong. Users may have
  485. their own personal fBerrorfP CGI binary. This binary gets called
  486. if the server can decode the user's name but something goes wrong
  487. anyway (for instance, one of those user's files can't be found).
  488. If there is a system fBerrorfP CGI binary, that one will be called if
  489. anything goes wrong, except in the case that the user has a personal
  490. fBerrorfP CGI binary.
  491. .LP
  492. This can be used to create friendly error message with links to
  493. appropriate (existing :) pages.
  494. .LP
  495. A few environment variables are set before fBerrorfP is called:
  496. .TP
  497. .B ERROR_CODE
  498. This variable is set to one of the following values:
  499. .TP
  500. o
  501. .B USER_UNKNOWN
  502. - the specified user is unknown
  503. .TP
  504. o
  505. .B POST_ON_NON_CGI
  506. - a POST method was attempted to
  507. a non-CGI binary
  508. .TP
  509. o
  510. .B INVALID_PATH
  511. - an invalid path was specified,
  512. for example one with fB..fP in it
  513. .TP
  514. o
  515. .B DIR_NOT_AVAIL
  516. - the directory is protected by
  517. a fB.noxsfP file
  518. .TP
  519. o
  520. .B NOT_REGULAR
  521. - the file to be retrieved is not a
  522. regular file
  523. .TP
  524. o
  525. .B PERMISSION
  526. - the file's permission deny access to
  527. the file
  528. .TP
  529. o
  530. .B NOT_FOUND
  531. - the requested file cannot be found
  532. .TP
  533. o
  534. .B NO_RELATIVE_URLS
  535. - URL not starting with a /
  536. are not supported
  537. .TP
  538. o
  539. .B UNKNOWN_METHOD
  540. - the requested method is not
  541. fBPOSTfP, fBGETfP or fBHEADfP.
  542. .TP
  543. o
  544. .B UNAUTHORIZED
  545. - the user has attempted to access a file that is protected by a
  546. username and password combination. The user has filled in wrong
  547. username/password combination.
  548. .TP
  549. .B ERROR_READABLE
  550. This variable contains the text that the server would
  551. normally send to the remote client. This can be used in
  552. case you do not want to process some of the fBERROR_CODEfPs
  553. above.
  554. .TP
  555. .B ERROR_URL
  556. The URL that was requested (without the server name)
  557. .TP
  558. .B ERROR_URL_EXPANDED
  559. The URL that was requested with /~fBuserfP/ expanded
  560. .TP
  561. .B ERROR_URL_ESCAPED
  562. The request URL as above, but with fB<fP, fB>fP
  563. and fB&fP substituted to make it printable
  564. Of course, regular CGI variables are also set, such as
  565. .B REQUEST_METHOD.
  566. .LP
  567. .SH ACKNOWLEDGEMENTS
  568. I thank all the members at MCGV Stack who are actively involved in the
  569. entire WWW happening.
  570. .SH "SEE ALSO"
  571. http://www.stack.nl/~sven/xs-httpd/
  572. .br
  573. xspasswd(1), imagemap(1), clearxs(1), readxs(1), gfxcount(1), xsindex(1),
  574. httpdc(1)
  575. .SH COPYRIGHT
  576. All the programs in the XS-HTTPD package are copyright (C) 1995, 1996
  577. by Sven Berkvens, except the imagemapper.
  578. .SH AUTHOR
  579. The author of this WWW server and its accompanying programs is
  580. Sven Berkvens (sven@stack.nl). I made all the programs,
  581. except the imagemapper, which I took from the NCSA distribution,
  582. but I cleaned it up.