Cherokee号称是目前最快的 Web 服务器软件,据说在性能上甚至比 Nginx 还略胜一筹。并且它们提供了一个benkmark测试来试图证明这一点,参与比较的有lighttpd,nginx。
同时,Cherokee还具有众多的模块功能支持,比如FastCGI、SCGI、PHP、CGI、TLS 及 SSL 加密连接,虚拟主机,授权认证,实时编码,载入均衡,与 Apache 兼容的 log 文件等等。从功能的丰富性上来说,可以与Apache httpd比肩了。
高性能和图形化的服务器管理是Cherokee的俩大卖点。
本文写作时,Cherokee的版本是1.2.1。Cherokee的中文意思是切罗基人,美洲的五大土著人种之一。不过读起来,我感觉还是老毛子的Nginx发音比较硬派。
安装以及配置
基本上各大主流Linux和BSD发行版的软件仓库中都已经有现成的Cherokee软件包了。可以直接用各自的工具来自动安装,当然Cherokee也提供从源代码自己编译安装。
主要的配置文件是/etc/cherokee/cherokee.conf,这个文件的语法开起来比较不舒服,而且到目前为止,Cherokee不支持conf文件的include功能,也就是说,你无法像apache或者nginx那样,将配置分散到不同的文件中,Cherokee只能使用一个配置文件cherokee.conf。官方是这样解释的,他们不建议你手工编辑cherokee.conf文件,而应该通过cherokee-admin程序来编辑。cherokee-admin程序会提供一个设计良好的web界面,通过这个界面,你可以很好的将cherokee配置进行模块化管理。
不过我依旧觉得,conf文件不能使用include语句来实现配置的模块化是一个非常不舒服的事情。
性能
单从处理时间上来说,“fastest”这个词用在Cherokee上并没有问题。关于Cherokee的性能,可能第三方的测试比较客观。和公认的高性能服务器Nginx相比,有人做了ab测试,http://www.oschina.net/bbs/thread/482。总结一下,在100并发下,Cherokee比nginx的处理时间确实要短一些,但是在更高的并发下,Cherokee会出现Failed requests(请求失败),而nginx却不会出现。就是说,Cherokee虽然处理时间更短,但是不稳定,会出现请求失败。
对于低并发的网站,Cherokee快出的那几个毫秒似乎没有什么意义,对于高并发的网站,Cherokee又会出现请求失败的不稳定状况。“fastest”在这里就显得有些鸡肋了。期待未来的版本,Cherokee可以进一步提高服务器的稳定性。
从服务器内存消耗方面来说,Cherokee可能比nginx更加吃内存。都是开两个工作线程(worker),Cherokee比nginx需要更多的内存。所以对于内存不大的VPS用户,nginx可能依旧是最好的选择。
图形化配置管理
Cherokee的所有配置都可以通过图形化的方式来进行,具体说就是cherokee-admin工具。
执行cherokee-admin会在本地开启一个服务器管理界面,并产生一个用于登录的临时密码,注意只能从本地才能登录这个管理界面。
执行cherokee-admin -b则会让管理界面可以在Internet上访问。
cherokee-admin -b -u可以产生一个无需密码就可以从internet上访问的管理界面,虽然这么做并不安全,但是可能在你本地机器上调试Cherokee的时候显得更加方便。
cherokee-admin默认开启10个线程,很占内存,如果你的服务器内存不够的话,可以通过制定-T参数来限制开启的线程数目,比如cherokee-admin -T 1。
如果cherokee-admin运行出错的话,可以加上-x参数来显示调试信息,比如cherokee-admin -b -x。
另外cherokee-admin的参数好像不能写在一起,比如cherokee-admin -bu就会出现错误,写成cherokee-admin -b -u就没问题了。
cherokee-admin从逻辑上完全实现了服务器配置的模块化管理(虽然,实际上物理配置文件只有一个),它负责将cherokee.conf以一种更加符合认知的方式展现出来。对于新手来说,不用记那么多的命令代码是个好事,对于老手来说,图形化的配置管理也显得更加方便。
你可以针对每个虚拟服务器方便的进行管理。
功能
Cherokee提供了非常多的功能,具体可以参考这里:http://www.cherokee-project.com/doc/modules.html。下面简要介绍一些”不可错过“的模块。
完善的动态脚本支持。
Nginx的CGI扩展还处于试验阶段,所以一些动态perl产生的网页,配置起来就不那么方便。但是Cherokee则不同,它提供一套完善的动态语言脚本支持。你可以通过信息源(sources)页面来配置,并在vserver的handler选项卡来启用这些东西。(可以参考下部分的php配置)。
CGI: Common Gateway Interface.
FastCGI: Fast Common Gateway Interface.
SCGI: Simple Common Gateway Interface.
uWSGI: uWSGI protocol.
视频/音频流(Audio/Video Streaming)。
做在线视频的项目这个少不了。具体参考http://www.cherokee-project.com/doc/modules_handlers_streaming.html。功能还是非常实用的。
URL重写(Redirect)。
必不可少的功能。配置起来非常直观,选项也很多。
Hidden Downloads
假如你有一个叫/bar/foo/example.iso的文件,只有某些被许可的人才能下载,可以使用这个功能来完成这一要求。当那些被许可的人请求这个文件下载的时候,服务器会返回一个一次性地址/downloads/ac003ebbb88c4fc9a75687223c72c6da/49b40a43/bar/foo/example.iso。
这样,没有被授权的人就无法获得这个文件的下砸地址了。
Mysql桥(MySQL bridge)
可以将后端的Mysql数据库抽象成http方式来访问。可以直接用在JSON、Php或者Python中。http://www.cherokee-project.com/doc/modules_handlers_dbslayer.html。
负载均衡
支持多种方式的负载均衡,包括Round robin,IP Hash,Failover。
IO cache和sendfile支持
IO是制约服务器处理时间的重要因素,凭借着IO cache和sendfile支持,让服务器跑的更快速。Cherokee允许你在每个虚拟服务器上选择启用还是关闭这一功能。
安全和身份验证
让某个WEB资源只有获得认证的人才能访问,验证方式多种多样,包括:
Plain: 纯文本文件的验证方式。你可以将密码写在一个文本文件中。
htpasswd: htpasswd方式。Apache httpd自带的那种。将用户名和加密了的密码放在一个文件中。
htdigest: htdigest机制。
LDAP: LDAP身份验证。
MySQL: 将用户记录放在数据库中。
PAM:PAM机制。
Fixed list: 固定名单。
立即关闭TCP连接(Drop Connection)
不管三七二十一,直接关闭TCP连接,用于应对服务器被攻击。
具体演示:如何搭建一个wordpress虚拟主机
wordpress虚拟主机包括了php支持,url重写等等,通过配置wordpress,可以大概了解Cherokee的使用。
新建一个信息源,用于提供PHP服务,这里我们选择fastcgi/php-fpm的方式来使用php。配置细则如下。
新建一个虚拟主机,配置它的rule规则。
选择第一个,自定义。
本来是有wordpress虚拟主机模板的,但是在新版本中,由于cherokee-market的出现,cherokee试图向让用户通过market来安装这些wordpress。这样有一个问题,market安装的网站会出现在/var/lib/cherokee/ows/目录下,这个目录你现在还无法自己制定。
而且有些开源软件的安装,比如drupal,market也会向你收费。服务器资源是我的,drupal也是开源的,为什么收费我就不知道了。