使用Lighttpd mod_proxy代理子文件夹

我遇到问题,让mod_proxy正确地将流量转发到运行在预定义子文件夹的同一台机器上的其他Web服务器.理想情况下,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"
 }
}

我一直在反对这一点,所以任何建议都是受欢迎的.

最佳答案 我最终想出了导致这个问题不能像我预期的那样工作的问题.

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

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

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

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