freebsd + lighttpd + fastcgi + MoinMoin
最近重新整理了一下实验室的服务器,全新安装了 FreeBSD 7.2。比较郁闷的事情就是在 lighttpd 上重新配置 MoinMoin,以前做过成功的配置,但是升级系统时,忘记保存 lighttpd 的配置文件了。尝试了一段时间,总算又搞定了,这次得做个记录。
首先可以参考这篇文章安装并配置好 lighttpd 环境,然后就可以去 MoinMoin 的官方网站去下载 MoinMoin 的最新版本,目前最新的稳定版本是 1.8.5。
按照 MoinMoin 安装包内的 docs/INSTALL.html 文档的指点,将 MoinMoin 基本安装以及 Wiki 实例创建步骤都做完了,最后的环节就是配置 lighttpd.conf 文件,由于 INSTALL.html 文档在这部分语焉不详,并且我对 Web 服务器的原理以及 lighttpd 的配置语法都不熟悉,让我茫然了好大一会。翻来覆去,看了好几遍 INSTALL.html 给出的这段 lighttpd.conf 的配置代码:
$HTTP["host"] =~ "^(www\.)?example\.org" { url.rewrite-once = ( "^/robots.txt" => "/robots.txt", "^/favicon.ico" => "/favicon.ico", "^/moin_static161/(.*)" => "/moin_static161/$1", "^/(.*)" => "/wiki-engine/$1" ) server.document-root = "/srv/org.example/htdocs/" $HTTP["url"] =~ "^/wiki-engine/" { fastcgi.server = ( "/wiki-engine" => (( "docroot" => "/", "min-procs" => 10, "max-procs" => 10, "max-load-per-proc" => 2, # allocate successive port numbers for each process, starting with "port" "bin-path" => "/srv/org.example/bin/moin.fcg", "host" => "127.0.0.1", "port" => 3060, "check-local" => "disable", )) ) } }
不禁有点飘飘欲仙之感,因为这串代码对我来说简直如天书一般。连猜带蒙的,最后我是这么来理解的:
- $HTTP["host"] 是用来设置虚拟主机的,就是那种多个域名共享 1 个 IP 的虚拟主机,那个 ^(www\.)?example\.org" 是采用正则表达式来匹配 www.example.org 这个域名。"=~" 就表示后面跟随的字串是正则表达式,对于非正则表达式,可以用 "=="。
- url.rewrite-once 是采用正则表达式匹配的方式用来替换 "www.example.org" 后面所跟随的字串(即 url 字串)的。比如 "www.example.org/robots.txt" 所跟随的字串是 "/robots.txt",当它被 url.rewrite-once 中的 "^/robots.txt" 所匹配时,就会被替换为 "/robots.txt"。嗯,这里对于 "/robots.txt"、"^/favicon.ico" 以及 "^/moin_static161/(.*)" 都是替换为其自身,好像是在咬自己尾巴玩,实际上它们是为了让对应的三个 url 不被那个 "^/(.*)" 替换规则篡改。
- server.documet-root 就是指定 MoinMoin 网页模板所在的目录,而那个 wiki-engine 是 MoinMoin 实例所在的目录。
- $HTTP["url"] 是用来定义 fastcgi 服务器的,它也是采用正则表达式来匹配 "/wiki-engine/" 这个 url 字串,表示只要匹配通过的 url 字串所代表的页面请求都通过一个 fastcgi.server 来处理。
- 在 fastcgi.server 的配置中,除了做一些平常的配置之外,最关键的在于指定 moin.cfg 文件所在的全路径。moin.cfg 是用来实现 MoinMoin 与 fastcgi 服务器相互联接的,它默认位于 server.document-root/../server 目录内,我们可以将它复制到 wiki-engine 所在的目录。
基于上述的理解,我对上述 lighttpd.conf 的配置片段进行了以下修改:
### M2WK MoinMoin server.modules += ( "mod_alias" ) alias.url = ( "/moin_static185/" => "/usr/local/share/moin/htdocs/" ) $HTTP["host"] =~ "^192\.168\.0\.2" { url.rewrite-once = ( "^/robots.txt" => "/robots.txt", "^/favicon.ico" => "/favicon.ico", "^/moin_static185/(.*)" => "/moin_static185/$1", "^/(.*)" => "/m2wk/$1" ) server.document-root = "/usr/local/share/moin/htdocs/" $HTTP["url"] =~ "^/m2wk/" { fastcgi.server = ( "/m2wk" => (( "docroot" => "/", "min-procs" => 10, "max-procs" => 10, "max-load-per-proc" => 2, "bin-path" => "/usr/local/var/m2wk/moin.fcg", "host" => "127.0.0.1", "port" => 3060, "check-local" => "disable" )) ) } }
值得注意的地方是:我配置的服务器只是在内网中使用的,没有域名,所以 $HTTP["host"] 只能匹配服务器的 IP 地址了;需要启用 lighttpd 的 alias 模块,以便将 MoinMoin 所生成的网页中所使用的 "/moin_static185/" 路径映射到服务器本地目录。
配置完 lighttpd.conf 之后,还得对 moin.fcg 中的一处代码片段进行一些修改:
class Config(FastCgiConfig): # properties = {'script_name': '/'} # use this instead of the line above if your wiki runs under "/" url # for backlog, we use a default of 5. if the listen(backlog) call crashes for you, try a smaller value! # backlog = 1 max_requests = 1000 properties = {'script_name': '/'} # <--- 必须有
现在启动(重新启动) lighttpd 之后,在浏览器中输入服务器的 IP 地址,就应该能够看到 MoinMoin 的页面了,剩下的事情就是有关 Wiki 的配置,不再细说。
但是,这里有个费解的问题。通过上述方式配置好 MoinMoin 之后,当我重启 FreeBSD 时,通过 rc.d 的方式启动 lighttpd 会失败,等 FreeBSD 启动完毕后,通过手工启动 lighttpd,就不出错。
在 FreeBSD 中配置 Lighttpd 服务
本文介绍 FreeBSD 中 Lighttpd 的安装与最基本的配置,目标仅是实现 Lighttpd 提供静态网页访问支持。
开启 FreeBSD 的匿名 FTP 服务
虽然先是看了 FreeBSD 用户手册的“文件传输协议”一节,对 FreeBSD 自带的 ftpd 有了大概了解,但是在着手配置实验室内部使用的匿名 FTP 服务时,还是遇到了一些小挫折。
尝试 FreeBSD
早就想除实验室服务器上的 ubuntu server 而后快,趁着近来总是有人出现 ssh 连接遭拒绝的问题,便下手了。在挑选继任系统上,第一个想到的就是 FreeBSD。也许是一只深受 ESR 的《Unix 编程艺术》的忽悠,对 Unix 始终存在着莫名其妙的神秘感,相对于自己天天都在用的 Linux,前者仿若皇室贵胄,深沉威严;后者则很像与我一样苦出身的平头百姓。