使用Lighttpd mod_proxy代理子文件夹

时间:2012-09-18 03:38:42

标签: lighttpd mod-proxy

我遇到问题,让mod_proxy正确地将流量转发到在预定义子文件夹的同一台机器上运行的其他网络服务器。理想情况下,domain.com/docs应转发至127.0.0.1:3000,所有其他流量应保留在domain.com上。这里的重写规则适用于在domain.com上运行的wordpress安装:

$HTTP["host"] =~ "(^|\.)domain\.com" {
 $HTTP["url"] =~ "^/docs" {
  proxy.server  = ( "" => (( "host" => "127.0.0.1", "port" => 3000 )))
 } 
 $HTTP["url"] !~ "^/docs/(.*)" {
  url.rewrite = (
   "^/(.*)\.(.+)$" => "$0",
   "^/wp/(.*)$" => "$0",
   "^/(.+)/?$" => "/index.php/$1"
  )
  server.document-root = "/mnt/webroot/html"
 }
}

我一直在反对这一点,所以欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

我最终弄清楚导致这种问题不能像我预期的那样工作的问题。

lighttpd的重写mod的工作方式是在评估所有url.rewrite命令之前评估它的$ HTTP [“url”]条件,这意味着在$ HTTP [“url”]条件下放置的任何url.rewrite命令都将没有效果。

我无法找到一个很好的解决方案,我正在寻找具有此限制的实现,而是最终将一些重写下游推送到另一个服务器(在这种情况下为节点),我正在代理流量到。

在lighttpd的ModRewrite文档中使用此行宽泛地引用了这一点:

NOTE: url rewriting does not work within a $HTTP["url"] conditional.