Переписать URL перед передачей на прокси Lighttpd
Я пытаюсь настроить обратный прокси-сервер в lighttpd, чтобы все запросы (и только эти запросы) в каталоге /mobile/video перенаправлялись в каталог / вторичного веб-сервера. Это довольно просто в 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. Однако, если я сделаю глобальное переписывание, то все будет перенаправлено на вторичный сервер, что тоже не то, что я хочу.
Как мне выполнить эту задачу?
2 ответа
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, потому что он ищет http://$PROXY/post-a-link не на сервере с портом 9091.