在传递给代理 Lighttpd 之前重写 URL

在传递给代理 Lighttpd 之前重写 URL

我正在尝试在 lighttpd 中设置反向代理,以便将 /mobile/video 下的所有请求(仅限这些请求)重定向到辅助 Web 服务器的 / 目录。这在 apache 中相当容易,但我无论如何也想不出如何在 lighttpd 中做到这一点。

$HTTP["url"] =~ "^/wsmobile/video/" {
       url.rewrite-once = ( "^/wsmobile/video/(.+)" => "/$1" )
       proxy.server = ( "" => ( ( "host" =>  "210.200.144.26", "port" => 9091 ) ) )
}

我尝试使用 http["url"] 指令,但 lighttpd 只是忽略这些请求并继续将完整 url 传递给辅助服务器,这当然会阻塞并抛出 404。但是,如果我进行全局重写,那么所有内容都会转发到辅助服务器,这也不是我想要的。

我该如何完成这个任务?

答案1

网址重写不起作用在 中$HTTP["url"]。但是,您应该能够以这种方式全局重写它:

url.rewrite-once = ( "^/wsmobile/video/(.*)" => "/test/" )

然后用以下方法捕获它:

$HTTP["url"] =~ "^/test/" {

   # do proxy here

}

更新:

请参阅此处:Lighttpd 错误 #164。 具体来说,代理核心重写请求应该是你要找的。

答案2

proxy.header从 lighttpd v 1.4.46 开始可以实现这一点。参见:

https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModProxy

上面的例子是:

$HTTP["url"] =~ "^/wsmobile/video/" {
proxy.header = ("map-urlpath" => ( "/wsmobile/video" => "/" ))
proxy.server = ( "" => ( ( "host" =>  "210.200.144.26", "port" => 9091 ) ) )
}

不过我发现,如果你在代理服务器上发布一些内容(比如http://210.200.144.26:9091/发布链接"),但它无法正确地转换回代理,从而引发 404 错误,因为它正在寻找不在端口 9091 的服务器上的 http://$PROXY/post-a-link。

相关内容