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)


person impf    schedule 01.02.2011    source источник
comment
Должен быть сбой сервера, а не ТАК   -  person Daniel DiPaolo    schedule 01.02.2011
comment
В чем здесь вопрос? У меня нет проблем с помощью Lighttpd, но я вижу много настроек и никаких реальных вопросов (по крайней мере, это имеет смысл, учитывая настройку) ...?   -  person ircmaxell    schedule 01.02.2011
comment
Вопрос заключался в том, как настроить proxy.server() для пересылки запросов 192.168.1.10/DeviceB на 192.168.1.20/index.html.   -  person impf    schedule 02.02.2011


Ответы (2)


Ваша потребность известна разработчикам lighttpd уже несколько лет.

На это отвечает обходной путь или новая функция в зависимости от версии.

Lighttpd 1.4

Обходной путь объясняется в системе отслеживания ошибок: bug #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" ),
  )
}
person AizeLauna    schedule 19.10.2013

Необходимый пакет

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

person PicoCreator    schedule 27.07.2012