lighty 的生活

lighty 开发者博客

Lighttpd 1.4.8 和多个 Rails 应用

lighttpd 1.4.8 刚刚发布,除了大量错误修复外,我们还在 fastcgi.server 中添加了一个新选项,以允许在一个虚拟主机中简单地设置多个 Rails 应用。

除了 fastcgi.server 的常规设置之外,新的选项“strip-request-uri”会在将请求 URI 发送到后端之前移除其部分内容。

$HTTP["url"] =~ "^/app1/" {
  server.document-root = "/home/jan/rails/app1/public/"
  alias.url = ( "/app1/" => "/home/jan/rails/app1/public/" )
  server.error-handler-404 = "/app1/dispatch.fcgi"
  fastcgi.server = ( "/app1/dispatch.fcgi" =>
    (( "socket" => "/tmp/app1.socket1",
       "bin-path" =>  "/home/jan/rails/app1/public/dispatch.fcgi",
       "strip-request-uri" => "/app1/"
  )))
}

$HTTP["url"] =~ "^/app2/" {
  server.document-root = "/home/jan/rails/app2/public/"
  alias.url = ( "/app2/" => "/home/jan/rails/app2/public/" )
  server.error-handler-404 = "/app2/dispatch.fcgi"
  fastcgi.server = ( "/app2/dispatch.fcgi" =>
    (( "socket" => "/tmp/app2.socket1",
       "bin-path" =>  "/home/jan/rails/app2/public/dispatch.fcgi",
       "strip-request-uri" => "/app2"
  )))
}

但为什么呢?

Rails 对 URL 到应用的映射非常严格


/controller/action/parameter

一旦您想在同一个虚拟主机上运行多个 Rails 应用,就会出现命名空间冲突。

/app1/controller/action/parameter
/app2/controller/action/parameter

看起来更好,现在我们所要做的就是在将其交给 Rails 之前剥离 /appx。

稍后我们也会将此选项添加到 mod_scgi 和 mod_proxy,甚至在该级别添加重写规则。