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是必须的。
- MC_HTTPD(自己编写的一个web服务器的介绍)
- 编写一个自己的web框架(SimpleWebFrameWork)
- 写一个自己的web服务器
- 自己模拟的一个简单的web服务器
- 自己写一个建的的Web服务器
- 自己实现一个简单的支持并发的Web服务器
- JAVA 编写一个多线程的简单Web服务器
- 如何在自己的计算机上做一个web服务器
- 自己写一个简单的Web服务器(附Demo)
- 编写简单的WEB服务器
- 打造自己的Web(HTTP)服务器
- 自己来做一个简单的web服务器(一)理解基本的http协议
- 在树莓派(raspberry pi)中用Python编写一个简单的web服务器
- 自己写的web服务器
- 如何用java代码访问远程web服务器(手写一个自己的httpClient)
- 自己写一个Web服务器(2)
- 自己写一个Web服务器(3)
- 自己写一个Web服务器(1)
- WPF 去掉最大化最小化的方法
- NSSortDescriptor(数组排序)
- 教你打包Java程序,jar转exe随处可跑
- iOS Cell 的高级定制
- memset,memcpy,strcpy 的区别
- MC_HTTPD(自己编写的一个web服务器的介绍)
- 传诺基亚月底推Android手机 去除一切谷歌服务
- POJ 3295 Tautology(构造法 stack)
- 《高效学习OpenGL》之属性组 glPushAttrib(), glPopAttrib(), glPushClientAttrib(),glPopClientAttrib()
- JSON Example With RESTEasy + Jackson
- jitsi 源代码编译及windows 安装包打包 之二
- 刀片服务器与机架服务器
- [Leetcode] Reorder List (Java)
- Binary Tree Postorder Traversal