У меня есть сервер Lighttpd, работающий по HTTPS, и я хочу, чтобы один подкаталог на сервере действовал как обратный прокси-сервер для отдельного сервера, работающего по HTTP. Я пробовал следовать руководствам по перезаписи прокси и URL-адреса, но что-то связано с настройкой SSL.
$SERVER["socket"] == ":81" {
url.rewrite-once = ( "^/directory/(.*)$" => "/index.html" )
proxy.server = ( "" => ( "" => ( "host" => "192.0.0.1", "port" => 123 )))
}
$HTTP["scheme"] == "http" {
$HTTP["host"] =~ ".*" {
url.redirect = (".*" => "https://%0$0")
}
}
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.ca-file = "/etc/lighttpd/fullchain.pem"
ssl.pemfile = "/etc/lighttpd/server.pem"
$HTTP["url"] =~ "^/directory/" {
proxy.server = ( "" => ( "" => ( "host" => "127.0.0.1", "port" => 81)))
}
}
Мое намерение состояло в том, чтобы переход в / directory / перенаправил вас на 192.0.0.1:123/index.html. Я последовал за это руководство в котором упоминалось, что сначала выполняется перенаправление на порт 81, а затем порт 81 перенаправляется на второй сервер.
Кажется, что это не работает, просто застревает в цикле перенаправления и всегда возвращает 301 на сайт https.
Если я не сделаю перенаправление: 81, я могу заставить нижний proxy.server перенаправить в нужное место, но он сохранит окончание / directory /, которое не попадает туда, где мне это нужно.
Спасибо.
lighttpd 1.4.46 и более поздние версии имеют функцию mod_proxy, которая позволяет переназначать префиксы URL-адресов. См. Директиву proxy.header и дополнительный параметр map-urlpath.
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModProxy
Эта функция позволяет избежать конфигурации двойного прокси, которую вы пытаетесь использовать.
lighttpd 1.4.46 был выпущен чуть более года назад, а последний выпуск lighttpd - lighttpd 1.4.51.