Lighttpd как обратный прокси
DeviceA служит обратным прокси-сервером и должен пересылать запросы следующим образом:
192.168.1.10/DeviceB == > 192.168.1.20/index.html
192.168.1.10/DeviceC == > 192.168.1.30/index.html
Оба индексных файла находятся в каталоге /var/www и являются статическими "Hello world!". страницы. Проблема в том, что я не могу получить доступ к этим файлам через DeviceA, но если я вызову тестовую службу, также запущенную на DeviceC (прослушивая порт 12345), все будет хорошо.
Я ошибаюсь, говоря, что веб-сервер на DeviceB, DeviceC должен отвечать index.html, если запрос входит в порт 80???
lighttpd.conf DeviceA @192.168.1.10 server.modules = ( "mod_proxy" )
proxy.server = (
"/DeviceB" => ( "" => ( "host" => "192.168.1.20", "port" => 80 )),
"/DeviceC" => ( "" => ( "host" => "192.168.1.30", "port" => 80 )),
"/TestService" => ( "" => ( "host" => "192.168.1.30", "port" => 12345 ))
)
lighttpd.conf DeviceB @192.168.1.20
server.document-root = "/var/www"
server.port = 80
index-file.names = ( "index.html" )
lighttpd.conf DeviceC @192.168.1.30
server.document-root = "/var/www"
server.port = 80
index-file.names = ( "index.html" )
Обновление
Нужно ли мне $HTTP [ "host" ] ==... вокруг proxy.server() переписывать/перенаправлять URL-адреса? Или, как определить, что должно быть прокси (ed)
Ответы
Ответ 1
Ваша потребность известна разработчикам lighttpd с нескольких лет.
На это отвечает обходной вариант или новая функция в зависимости от версии.
Lighttpd 1.4
Обходной путь объясняется в bugtracker: ошибка # 164
$HTTP["url"] =~ "(^/DeviceB/)" {
proxy.server = ( "" => ("" => ( "host" => "127.0.0.1", "port" => 81 )))
}
$SERVER["socket"] == ":81" {
url.rewrite-once = ( "^/DeviceB/(.*)$" => "/$1" )
proxy.server = ( "" => ( "" => ( "host" => "192.168.1.20", "port" => 80 )))
}
Lighttpd 1.5
Они добавили эту функцию с помощью этой команды (официальная документация):
proxy-core.rewrite-request: переписать заголовки запросов или запросить uri.
$HTTP["url"] =~ "^/DeviceB" {
proxy-co...
proxy-core.rewrite-request = (
"_uri" => ( "^/DeviceB/?(.*)" => "/$1" ),
"Host" => ( ".*" => "192.168.1.20" ),
)
}
Ответ 2
Необходимый пакет
server.modules = (
...
"mod_proxy",
...
)
Настройки внешнего прокси-сервера: для lighttpd.conf @192.168.1.10
$HTTP["url"] =~ "^.*DeviceB" {
proxy.server = ( "" =>
(( "host" => "192.168.1.20", "port" => 80 ))
)
}
$HTTP["url"] =~ "^.*DeviceC" {
proxy.server = ( "" =>
(( "host" => "192.168.1.30", "port" => 80 ))
)
}
Для полной документации lighttpd mod_proxy вы можете обратиться к http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxy