msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

我为什么不用nginx、lighttpd

有了自己的VPS,在选择软件上有了很大的自主权。自己喜欢什么就用什么,只要高兴就好。

对于web server 的选择,其实有很多个,都是很优秀的,有时候会让人左右为难。

我也是这样。

当初刚到手VPS的时候,第一时间卸掉了自带的apache 1.x 吧(记不清了~)。
原因很简单,我不喜欢用老的版本,因为:
1.有很多已知的 bug 和 CVE。
2.老版本性能上肯定是不如较新版本的
3.就是个人原因,比较喜欢追求新版本(据说这也是一种病),版本控~

所以,我卸载的毅然决然。

其实我一直是apache httpd 的追随者,不可否认的是apache 的 httpd 在全世界的使用率也是最高的。
具体的数据是多少,我一时也说不清楚。

可惜的很,当我拿到VPS的时候,apache httpd 2.3.5 alpha 发布有段时间了。
其实,这是我最想安装的版本。

不过很遗憾的是,该版本不支持,或者说是没有得到 php 5.3.x 分支的支持。
我当时测试的是 php的5.3.2版本.毛病体现在apache httpd 不能正常载入生成的 libphp5.so.

后来被确认是php 开发组没有及时的跟进.这也是为什么以 alpha 形式发布的原因.(具体可以参见Maillist)
我测试了一下apache httpd 2.2.15 是可以正常工作的.

既然用不了新的版本,那就等一等.

先换个别的暂时顶替一下.web server 种类很多.
大概看了一下,国内用的比较多的是 号称快过apache httpd 10倍速的nginx 和 相对来讲低调的多的 lighttpd.

nginx 我以前用过一段时间,当时是为了搭建个web 共享平台,纯粹是directory index 了.
而 lighttpd 我是久仰大名,比如 著名的开源播放器 videolan的 ftp 就是用它搭的。

我之前的也小用过一段时间.

不过,我都不是很喜欢.换句话说,用过一次就不打算再用了.

原因很简单,它们的配置文件让我感觉很奇怪。
或者说是,配置文件的格式让我很蛋疼.

你见过 "port" => 80 这样的配置吗?真的是很别扭.
像nginx 里面居然还出现了 {} 这样的区块!貌似还有嵌套……

我想问一句,这是程序源码吗?要搞成这样..总之是让人很头晕。

能不能像 html、xml 那样有序,一目了然?

可能是我用apache httpd 的时间长了,先入为主了
不过不可否认的是,像httpd.conf 那样的配置的确更加易读、易懂、易改、易扩展.

而在多方考察后,我选择的是工作原理与nginx、lighttpd 一样都为fcgi server的Cherokee.
不为别的,就是为的一个省心,为的一个Cherokee-admin 的程序.

它可以让轻松我配置好一切,而不用去和配置文件打交道.
而且,我要说的是而且,它的并发处理和负载能力一点也不输于nginx之流.

再者它的吉祥物我很是喜欢,一个奔跑的小家伙,很棒!
见图:
Cherokee logo

这是它的官网(http://www.cherokee-project.com/),有兴趣可以看看.
另外,如果你的网站架设在Cherokee上,可以到该地址(http://www.cherokee-project.com/cherokee-domain-list.html) 去提交你的网址,一旦被确认就会被加入到列表中哟

不过Cherokee现在也不是很稳定,有不少潜在的bug.
像这几天,一天一个新版本,人家月经,它日经!

像这种日经般的更新,一般人哪有那么多闲工夫去跟进.
特别是一些个大站,几年难得更新一次。上次看到淘宝网的报错信息,人家的jboss还是04年编译的呢

可见,频繁更新只是我等这些小站站长热衷的事情,不过本人表示影响不大 :)

茫茫软件的海洋,选择一款自己喜欢的才是王道,不盲从、不跟风,只选适合自己的.

用https代替传统访问

由于一个众所周知的原因,就是为了打击大量非法网站的建设,在清查了一遍全国的IDC后,中国电信(网通不清楚)陆陆续续的封掉了家用ADSL的对外80端口.目的只有一个,就是让动态域名+家用服务器的小型网站从这个星球上消失。

当然,整顿非法网站我不反对。因为据我的经验,这些个站长的素质(或者说是职业道德)普遍不高。他们的网站上大多充斥着恶意脚本和后台木马、病毒等.这些都是为广大网民深恶痛绝的。

所以说,于情于理也都应该清理掉这些互联网的污垢.

可是这也给我带来了困扰,就是我用自己家里的一台Windows Server 08 r2系统搭建的web + ftp 的网络共享平台,也受到了影响,当然只是web方面.

本来想换个端口吧,开始毕竟我的朋友中有些人是不习惯这么奇怪的url的,一定程度上影响他们的使用。
后来又想,要不直接用ftp,因为21、22、23 端口是不受影响的。不过,有些人的电脑没有ftp 客户端,而且还要花时间去教他们怎么用。费事费力,再次搁浅.

面对80端口的时不时的抽风,我忽然想到了用https连接访问的方法.对啊!这是个好办法。因为https默认端口是443.
而且http与https仅有一字之差,很难分辨.

主意一定,我便开始行动了.

因为我的apache是集成了mod_ssl(提供openssl库的接口)的,所以不需要单独去下载openssl套件.
首先进入apache所在的目录,如"c:\program files\apache software foundation\apache2.2\",确保/bin 下存在 openssl.exe 程序.
我所要做的就是生成*.key、*.crt 两个文件,一个证书key和一个自签名证书.
请注意,我生成的是自签名证书(self-signed SSL Certificate).为什么呢?

因为我不可能,也没必要去到什么Verisign、Thawte等机构去申请一个。我启用SSL访问的唯一原因是为了不走80端口,仅此而已.不用那么麻烦,而且需不需要费用和通不通过还说不准.

用官方的话来讲,也可以是测试目的,呵呵
开始动手,
进入命令行,把当前目录定位到apache的/bin 下,

先生成key:
openssl genrsa -des3 -out server.key 1024
记住输入的pass-phrase,启动apache要用到.
如果和我一样是windows系统的话,最好不要加入pass-phrase,因为windows 不支持内置短语.
启动apache会报"Error: SSLPassPhraseDialog built-in is not supported on Win32"错.

如果已经生成,可以用
openssl rsa -in server.key -out srv.key
去除掉pass-phrase.
ps:不要忘了注掉httpd-ssl.conf 下的SSLPassPhraseDialog.

之后生成证书:
openssl req -new -x509 -nodes -sha1 -days 365 -key srv.key -out server.crt -config ..\conf\openssl.cnf
ps:openssl config的路径可能会不一样.

最后,把bin目录下生成的srv.key(最好改下名)和server.crt 复制到别处,如C盘根目录下.

在apache 配置文件httpd-ssl.conf 下定义路径
SSLCertificateFile "C:/server.crt"
SSLCertificateKeyFile "C:/server.key"

再添加好virtuahost,重启apache.即可

如果像我一样,想彻底的抛弃http访问,一律使用https的话,可以考虑利用地址重写达到目的.
编辑httpd.conf文件,加入:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

或者
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://cnserver.homeftp.org/$1 [R,L]

这样都可以了.
现在我就可以对电信的行为表示影响不大了,呵呵

更多SSL/TLS设置,参见:http://httpd.apache.org/docs/2.2/ssl/