本站将继续前进 4

Posted by livepine on 2月 23, 2008

前一阵bluehost(本网站的托管商)的ruby on rails突然升级到2.0。虽然也保留了老版本的rails(1.2.6),但不知什么原因原本的blog引擎Typo就是没法用了。正好新的Typo 5.0基于Rails 2.0,趁机转换到新的平台。原来rails的应用是部署在FastCGI+Apache 1.3上,但FastCGI的效率实在比较恐怖。Bluehost装了Mongrel server,于是目前Typo是运行在Mongrel上,看上去还行,除了占用巨大的内存(>250MB)。但愿bluehost不会因此给我造成任何麻烦。

但Mongrel使用的是非80端口,这样会给用户带来困扰(例如很多局域网封非80端口,而且非标准端口看上去很怪异,也不利于SEO),于是研究如何在Apache 2.2上用Mongrel+Typo。最方便的做法就是使用Apache的模块mod_proxy和mod_proxy_http。这种内部代理能够将外部的请求(例如,正常80端口的请求)映射到Mongrel的端口上,这样Apache就相当于一个代理服务,能够和Mongrel一起工作了。Bluehost的Apache 2.2默认mod_proxy没有打开,联系了几次客服,说是由于这个模块一贯有安全漏洞,他们不能支持。

这样就非常麻烦了。没办法,只得自己写了个简单的Perl的proxy程序,模拟mod_proxy的功能,将所有80端口的请求映射到mongrel server的端口(4122)上。对于GET请求还比较简单,但POST(例如,评论功能)请求就有点复杂,需要用perl来模拟客户端行为,将POST上来的数据转换之后再POST到4122端口上。这个挺麻烦,偏偏需要模拟的是一个套Hash的Hash,总是搞不定。可能Perl的数据结构经过HTTP POST之后给Ruby接收就变了样。此外还有Apache ReWrite会丢弃内部锚符(#),这个可能会给现在的Ajax应用带来问题。看来一个好的proxy还是很复杂的,只能先放放了。

所以,这个blog的永久域名是weblog.livepine.org(livepine.org/weblog还能用,但会给自动转换成weblog.livepine.org),但目前你用这个域名来浏览本站还不能评论(会有出错信息)。如果你想评论,请将域名weblog.livepine.org替换成livepine.org:4122,其余的部分都一样。后面这个4122域名应该长期有效,但等评论功能恢复之后不建议使用,毕竟看上去比较丑么。

所以,是的,本站没有死,将继续前进。