设为首页 收藏本站
查看: 443|回复: 0

[经验分享] [原创]基于PHP写的Web服务器:Nanoweb

[复制链接]

尚未签到

发表于 2017-4-5 09:05:34 | 显示全部楼层 |阅读模式
  基于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同样也是强大的,能够做很多事情,只看你怎么做,发掘到什么程度。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360344-1-1.html 上篇帖子: 在php中,isset()的作用及实例说明 下篇帖子: PHP类的自动加载__autoload && spl_autoload_register
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表