2011-02-01 19 views
12

DeviceA sirve como un proxy inverso y se supone que reenviar las solicitudes de la siguiente manera:lighttpd como proxy inverso

192.168.1.10/DeviceB ==> 192.168.1.20/index.html

192.168.1.10/DeviceC ==> 192.168.1.30/index.html

Ambos archivos de índice se encuentran en/var/www y son estáticos "Hello world!" páginas. El problema es que no puedo acceder a esos archivos a través de DeviceA, pero si llamo a un servicio de prueba que también se ejecuta en DeviceC (escuchando en el puerto 12345) todo funciona bien.

¿Me equivoco al decir que el servidor web en DeviceB, DeviceC debería responder con index.html si entra una solicitud en el puerto 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") 

actualización

¿Necesito $ HTTP [ "host"] == ... alrededor proxy.server() para volver a escribir/redirigir URL? O, ¿cómo definir lo que será proxy (ed)

+5

debe estar en serverfault, no tan –

+0

¿Cuál es la pregunta aquí? No tengo problemas para ayudar con Lighttpd, pero veo una gran cantidad de configuración y ninguna pregunta real (al menos eso tiene sentido dada la configuración) ...? – ircmaxell

+0

La pregunta era cómo configurar proxy.server() para reenviar las solicitudes 192.168.1.10/DeviceB a 192.168.1.20/index.html – impf

Respuesta

6

paquete necesario

server.modules = (
... 
    "mod_proxy", 
... 
) 

Su interfaz de configuración del proxy: para 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)) 
    ) 
} 

Para la documentación completa de lighttpd mod_proxy, puede consultar http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModProxy

10

Tu necesidad es conocida por los desarrolladores de lighttpd de varios años.

Se responde mediante una solución alternativa o una función nueva según la versión.

Lighttpd 1.4

Una solución es explicado en el bugtracker: 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

Se añade esta función con este comando (official documentation):

proxy-core.rewrite-petición: reescribir cabeceras de petición o solicitud URI.

$HTTP["url"] =~ "^/DeviceB" { 
    proxy-co... 

    proxy-core.rewrite-request = (
    "_uri" => ("^/DeviceB/?(.*)" => "/$1"), 
    "Host" => (".*" => "192.168.1.20"), 
) 
} 
Cuestiones relacionadas