我正在尝试在 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。