Назад | Перейти на главную страницу

Переписать 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-е. Однако, если я сделаю глобальную перезапись, все будет перенаправлено на вторичный сервер, чего я тоже не хочу.

Как мне выполнить эту задачу?

URL переписывается не будет работать в $HTTP["url"]. Однако вы сможете переписать его глобально следующим образом:

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

а затем поймать его с помощью:

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

   # do proxy here

}

ОБНОВИТЬ:

См. Здесь: Ошибка Lighttpd # 164. В частности, прокси-core.rewrite-запрос должно быть то, что вы ищете.

Это можно сделать с помощью 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.