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,甚至在该级别添加重写规则。