MC_HTTPD(自己编写的一个web服务器的介绍)

来源:互联网 发布:百万公众网络登录界面 编辑:程序博客网 时间:2024/05/22 16:42

本文介绍小生自己编写的一个服务器软件,项目的主页是sourceforge.net/projects/mchttpd/。

基本信息:

name: MC_HTTPD
author: 颜文泽(robin)
Revision: 0.9

注:程序为不稳定版本,不建议正式使用。如果有任何问题、建议和bug都请联系我,我的email是nnsmgsone@gmail.com

安装:

服务器软件运行于unix和类unix系统(其他系统并不支持,比如windows)。程序的正确运行依赖yacc, lex和共享内存库的安装。在使用前务必保证你的系统已经安装了yacc和lex,并且支持共享内存。

安装步骤:

1. cd mc_httpd-x.x

2. ./configure --mandir=/usr/share/man

3. make

4. su root
 
5. make install

6. take look at the configuration file in doc/mc_httpd.conf and modify it for your needs.

7. cp doc/mc_http.conf /etc/mc_httpd.conf

8. exit

支持:

支持GET, HEAD, POST, DELETE 和 PUT。

支持 Accept, Accept-Charset, Accept-Encoding, Accept-Language, Host, If-Match, If-Modified-Since, If-None-Match, If-Range, Range, If-Unmodified-Since 和 User-Agent request头部域。

支持Connection 和Date general 头部域。

支持Etag, Location 和Server response头部域。

支持Expires, Content-Encoding, Content-Length, Content-Location, Content-MD5, Content-Range, Last-Modified 和 Content-Type entity头部域。

支持cookie和status头部域。

支持cgi/1.1。

支持虚拟主机。

支持断点下载。

支持断点上传。(注:content-length的值必须遵照HTTP/1.1中的示例)

支持Multi-line header field。

不支持:

服务器不能用作代理服务器。

服务器不支持视频和音频。

命令行参数:

注:命令行参数的优先级高于配置文件。并且命令行参数重启时无法重新指定,所以除了-4,-6,-f选项外,其他的参数不建议使用。

-4:服务器进程以ipv4运行。

-6:服务器进程以ipv6运行。

注:如果-4和-6都不指定,具体的协议由服务器进程自己选定。例:ubuntu12.04会默认选择ipv4, freebsd9.1会默认选择ipv6。

-c:服务器进程将会测试用户的环境和配置文件,然后输出测试结果。服务器不会实际工作。

-x:调试选项。该版本不会工作。

-v:输出服务器的版本信息。服务器不会实际工作。

-d:指定服务器的根目录。例: -d /home/nns 服务器进程将会以/home/nns为根目录运行(就是执行chroot(/home/nns/)操作)。

-f: 指定配置文件的路径(必须为绝对路径)。默认的配置文件路径为/etc/mc_httpd.conf。

-u:指定服务器进程的uid。用户名和用户id都是可以接受的参数,服务器会自行转换。

-g:指定服务器进程的gid,组名和组id都是可以接受的参数,服务器会自行转换。

-p:指定端口号。

配置文件参数:

注:配置文件的参数的修改可以在重启后生效。源码doc目录下有mc_httpd.conf的范本,用户可以修改该文件,然后复制到/etc目录下。

rootpath:指定服务器的根目录。例:rootpath "/home/nns"  服务器进程将会以/home/nns为根目录运行(就是执行chroot(/home/nns/)操作)。

cgitimelimit: cgi程序的运行时间限制。该版本不起作用。

timelimit:该版本不起作用。

maxrequests:该版本不起作用。

maxinterval:同一个链接两个请求间的最大时间限制。

port: 指定端口号。

backlog:指定listen函数中的backlog值。

dirset: 0表示不显示目录。非0表示显示目录。

putset:0表示服务器禁止put办法,非0表示服务器允许put办法。

deleteset: 0表示服务器禁止delete办法,非0表示服务器允许delete办法。

mdaset:0表示服务器禁止发送Content-MD5头部域,非0表示服务器默认发送Content-MD5头部域。

etagset:0表示服务器禁止发送ETAG头部域,非0表示服务器允许发送ETAG头部域。

defaulttype: 当服务器无法鉴别文件的类型时,将使用该值。

defaultcharset: 服务器使用的字符集。

user:指定服务器进程的uid。用户名和用户id都是可以接受的参数,服务器会自行转换。

group: 指定服务器进程的gid,组名和组id都是可以接受的参数,服务器会自行转换。

tmppath: 服务器存放临时文件的路径。 例tmpath "/tmp/","/tmp/"前后的/可以添加也可以不添加,程序会自己处理。在本例子中的临时目录实际上是/home/nns/tmp(如果rootpath是/home/nns的话)。

logfile:服务器日志文件的路径(绝对路径)。用户应该定期查看和清理该文件的内容。

pidfile:服务器存放服务器进程id的文件。

hosts:服务器虚拟主机设置。具体格式如下:

hosts        {    "192.0.7.195" "nnsmgsone.com" "/www/" |      "192.0.7.158" "www.nnsmgsone.com" "/nns/"     }

 

indexnames:服务器会处理的默认页面。比如一个服务器的hosts 是

hosts        {    "192.0.7.195" "nnsmgsone.com" "/www/"  }

indexnames是

indexnames     {      "index.html"      | "index.xhtm"         }     

那么当服务器接受到nnsmgsone.com的请求时,它会查看/home/nns/www目录下是否存在index.html和index.xhtm然后将页面发送给浏览器。(假定rootpath是/home/nns)

cgipaths: cgipaths目录下的文件全部被当成cgi程序。如:

cgipaths    {                  "cgi-bin"     | "cgi" }        

那么程序将会把/home/nns/cgi-bin和/home/nns/cgi目录下的一切文件当成cgi程序处理。(假定rootpath是/home/nns)

errpage:指定程序的出错页面。如:

errpage        {    "404"    "404.html"}

 

当服务器找不到一个页面是就会将/home/nns/www/404.html回复给浏览器。

假设rootpath是/home/nns/,hosts是

hosts        {    "192.0.7.195" "nnsmgsone.com" "/www/" }

 

mimeencoding:指定mime encoding。

mimetype:指定mime type。

信号:

SIGTGERM: 温柔的杀死进程。

SIGHUP: 重启服务器进程。

cgi程序:

如果要运行一个cgi程序,rootpath目录下必须要有运行该程序的一切环境。例(假定rootpath是/home/nns):如果要运行一个shell文件,那么/home/nns/bin/sh是必须的(可能还需要其他的文件),如果要运行一个perl程序,那么 /home/nns/bin/perl和/home/nns/lib/libperl.so是必须的。

0 0
原创粉丝点击