Переписать 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.

Другие вопросы по тегам