Configuration

在傳遞給代理 Lighttpd 之前重寫 URL

  • February 26, 2019

我正在嘗試在 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。但是,如果我進行全域重寫,那麼所有內容都會被轉發到輔助伺服器,這也不是我想要的。 我該如何完成這項任務?

url重寫. $HTTP["url"]但是,您應該能夠以這種方式全域重寫它:

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

然後抓住它:

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

  # do proxy here

}

更新:

請參閱此處:Lighttpd 錯誤 #164。具體來說,proxy-core.rewrite-request應該是您正在尋找的。

這可以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/post-a-link),則不會正確翻譯回代理,因為它會拋出一個404,因為它正在尋找不在埠 9091 的伺服器上的 http://$PROXY/post-a-link。

引用自:https://serverfault.com/questions/135770