[原创]基于PHP写的Web服务器:Nanoweb

来源:互联网 发布:一枝梨花压海棠知乎 编辑:程序博客网 时间:2024/05/21 06:59

 

基于PHP写的Web服务器:Nanoweb

作者:heiyeluren
博客:
http://blog.csdn.net/heiyeshuwu
时间:2006-11-20

Nanoweb 是一个由PHP语言写的Web服务器,这个不是吹的,跟Apache/IIS一类的Web服务器一个性质,功能和扩展性跟Apache绝对有一拼。看看官方的介绍。

官方网站:http://nanoweb.si.kz
最新版本:nanoweb 2.2.8
下载地址:http://nanoweb.si.kz/downloads/dist/nanoweb_2.2.8.zip


【介绍】

官方网站介绍:

Nonaweb 是一个由PHP写的HTTP服务器,设计的小巧、安全、容易扩展,它很小巧、快速和强壮,它能够很容易的使用PHP开发专有的扩展。
它的发行完全遵守GNU的公共许可协议。


Nanoweb的主要特点:
- 支持HTTP/1.1
- 简单高效的配置
- 模块化的结构
- 支持FastCGI、CGI和SSI
- 可以构建基于名字和端口的虚拟主机
- 访问控制列表
- 支持通过htpasswd,MySQL,PostgreSQL和LDAP的访问验证
- 兼容Apache的日志记录格式,或者用MySQL来记录日志
- 目录浏览
- 支持inetd,通过外部帮助可以支持SSL
- DoS的防范
- 代理服务器扩展
- 支持Filters和gzip
- 支持RBL
- 支持扩展协议
- 更多...


其实我自己大致看了一下那些模块和帮助手册,它远远支持的不知这些,比如它支持PHP脚本、支持URL Rewrite、虚拟主机等,基本上是一个比较完善功能的Web Server。


【安装】

因为是使用php编写的,所以基本上是可以运行在任意安装了PHP CLI的平台,不过目前主要是支持Windows和Linux(类Linux)的系统中,我这里的例子就是安装在Windows XP SP2 上面。

先去官方网站把程序下载回来,可以下载zip包或者tgz包都行,里面的文件是一样的。文章上面提供了下载地址,我下载的就是zip包。下载后解压缩后,能够看到若干目录,包括 conf、contrib、docs、modules、src、www 等,docs是文档目录,文档都在里面,另外根目录下install.bat和install-sh两个文件,这是安装文件,安装在windows下使用install.bat,如果是Linux就使用install-sh文件。

记得安装之前必须有PHP的脚本引擎,我的脚本引擎是PHP 5.2.0,放在 c:/php 目录下,后面会用到。现在我们用文本编辑工具打开 install.bat 文件,能够看到开头的部分内容:

@ECHO OFF
ECHO ********************************************
ECHO * aEGiS nanoweb installer v1.0 for Windows *
ECHO ********************************************
ECHO.

SET INSTROOT=c:/nanoweb

ECHO Installing in %INSTROOT%
ECHO.

这个 INSTROOT 就是我们Nanoweb的程序安装目录,缺省是c:/nanoweb目录,可以自己修改,我这里就使用缺省的目录。直接执行 install.bat 文件就开始安装了,自动会拷贝一些文件和目录到 c:/nanoweb 目录下,结束安装成功。

 

【运行】

安装完成后,现在我们到c:/nanoweb目录下,能够看到这么几个目录:log、modules、tmp、www等,文件有mime.types、modules.conf、nanoweb.bat、nanoweb.conf、nanoweb.php、vhost.conf。
我分别简单介绍下这几个文件,log 目录是保存日志的包括服务器运行日志和错误日志,modules是保存所有Nanoweb服务器用到的模块文件,tmp是临时目录,www目录下是网站主目录,可以存放各个网站,www/default 是缺省的网站目录。mime.types是保存了所有Nanoweb支持的MIME头类型,modules.conf文件是关于各个扩展模块的加载配置的,nanoweb.bat 是启动Nanoweb的批处理文件,nonaweb.conf 是我们Nanoweb的主要配置文件,包括一些基本的配置,nanoweb.php 文件是我们Nanoweb服务器的核型程序文件,大概67KB左右,vhost.conf文件是虚拟主机配置文件。

现在我们需要启动我们的Nanoweb服务器,Nanoweb主要包括的启动信息有:
Usage: nanoweb.php [/path/to/nanoweb.conf] [options]

nanoweb supports the following command line options :

--help                                -h : this help screen
--version                             -v : show version info
--config=/path/to/nanoweb.conf        -c : configuration file
--set-option="optionname=optionvalue" -o : set configuration option
--add-option="optionname=optionvalue" -a : add configuration option
--start-daemon                        -d : start nanoweb and run in background
--config-test                         -t : test configuration and exit
--quiet                               -q : don't send text to console

我们要启动的话,只需要 c:/php/php.exe c:/nanoweb/nanoweb.php --config=c:/nanoweb.conf 就行了,现在我们先简单修改一些 nanoweb.bat 文件,缺省的文件内容:

@ECHO OFF
c:/php/php-cli.exe c:/nanoweb/nanoweb.php --config=c:/nanoweb/nanoweb.conf

我用的 PHP 5.2.0 安装在 c:/php 目录下,但是没有 php-cli.exe ,只有 php.exe,修改这个bat文件为:

@ECHO OFF
c:/php/php.exe c:/nanoweb/nanoweb.php --config=c:/nanoweb/nanoweb.conf

现在就能够启动了,现在开始启动我们的Nanoweb,直接执行 nanoweb.bat 文件,出现一个command的窗口界面,同时有很多输出信息,提示: pcntl_fork和posix_setuid不能使用,当e/然了,这个是Windows系统嘛,其他貌似都正常,现在我们来访问一下。(记得启动之前关闭其他占用80端口的Web服务器程序,比如IIS、Apache之类的)

打开浏览器,输入 http://localhost ,如果能够顺利出现Nanoweb 的网页界面,说明安装成功,我的就是安装成功,能够看到Nanoweb的Logo。我们自己写一个网页 test.html 放在 c:/nanoweb/www/default 目录下,内容是:
<h2>welcome to heiyeluren's world!</h2>

打开浏览器,输入 http://localhost/test.html ,顺利看到输出的内容。再来测试一下php支持情况,在 c:/nanoweb/www/default 下建立一个 test.php 的文件,输入代码:
<?
echo 'OK';
?>

然后用浏览器访问 http://localhost/test.php,顺利看到输出:OK,成功!

关闭Nanoweb也是比较简单,只需要关闭运行Nanoweb的cmd窗口就行了。

 

【总结】

Nanoweb却是是一个不错的Web服务器程序,运行简单,代码量也不大,我个人认为是一个非常不错学习Web服务器运作方式的例子,当然,如果实际把Nanoweb运行到正常的服务器中还是有一定的距离,毕竟PHP只是脚本语言,很多不可控性,当然,运行在Linux下会被运行在Windows下更稳定和安全。

学习Nanoweb能够更多的了解PHP下Socket的完美操作和关于一些Web服务器的设计方式,还有就是要知道,PHP同样也是强大的,能够做很多事情,只看你怎么做,发掘到什么程度。