Configuración y objetivo

En una frambuesa pi, estoy ejecutando un servidor Lighttpd (versión: lighttpd / 1.4.53 (ssl)). Este servidor fue instalado inicialmente por pi-hole , un DNS que estoy empezando a usar para administrar mi red. Ya logré asociarme http://raspi.homea mi IP de raspberry pi.

Este dispositivo ya ejecuta varios servicios, por ejemplo, un servidor R-shiny en el puerto 3838 y una instalación de asistente de hogar en el puerto 8123, a los que puedo acceder a través de http://raspi.home:3838/y http://raspi.home:8123respectivamente.

Mi objetivo ahora es poder acceder a mis servicios a través de direcciones fáciles de usar, como http://raspi.home/shiny(puerto 3838) y http://raspi.home/homeassistant(puerto 8123).

Dado que el servidor lighttpd se configuró para pi-hole, /var/www/html/contiene solo dos carpetas: "pihole" y "admin". Puedo acceder al panel de administración de pi-hole a través http://raspi.home/adminy http://raspi.home/piholees accesible, pero no es de mucha utilidad.

Mi objetivo es hacer que la navegación http://raspi.home/shiny/...sirva http://raspi.home:3838/...(y lo mismo para el asistente de hogar).

Avanzar tan lejos

Estoy modificando /etc/lighttpd/external.conf, lo que agrega /etc/lighttpd/lighttpd.conf(código aquí ). Intenté varias cosas, pero los archivos lighttpd conf me confunden bastante, y nunca estoy seguro de qué debo poner en el nivel raíz o en un $HTTP["url"].

Lo que más funcionó hasta ahora fue agregar una asignación de URL con la definición del servidor:

$HTTP["url"] =~ "^/shiny" {
    proxy.header = (
        "map-urlpath" => ( "/shiny" => "/" ),
        "upgrade" => "enable"
    )
    proxy.server = ( "" => ( ( "host" =>  "localhost", "port" => 3838) ) )
}

Desafortunadamente, esto también cambió todas las URL relativas para que http://raspi.home/shiny/index.htmlse busque cualquier imagen en en http://raspi.home/images/image.pnglugar de http://raspi.home/shiny/images/image.png. Por lo tanto, no se pudo encontrar ningún recurso.

Si elimino la condición, el mapeo es global, por lo que la aplicación se puede usar, pero como todo está mapeado, todos los demás sitios ahora son inutilizables. Esto se describe en este error, pero no pude hacer que la solución proporcionada funcione.

Lo intenté, "map-urlpath" => ( "/shiny(.*)$" => "/$1" )pero inesperadamente esto arroja un error 404 (con o sin la condición).

recursos

Aquí hay más recursos que podrían estar relacionados / ser útiles:

No me funcionaron, ya sea porque no puse el código en el lugar correcto o porque no se adaptaron a mi caso, quién sabe ...

answer
$HTTP["url"] =~ "^/shiny" {
    proxy.server = ( "" => ( ( "host" =>  "192.168.1.138", "port" => 3838 ) ) )
}

Elimine proxy.headerhasta que comprenda mejor lo que hace y lo que no hace.

https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModProxy

proxy.header "map-urlpath"modificará la línea de solicitud de los encabezados HTTP, pero lighttpd no reescribe el cuerpo de la respuesta, por lo que su servidor R-shiny tendrá que entender que tiene sus raíces en / shiny /. No he mirado R-shiny para ver si eso es posible.

Una alternativa diferente es crear los nombres DNS shiny.raspi.home y homeassistant.raspi.home, que luego puede configurar lighttpd para invertir el proxy

$HTTP["host"] =~ "shiny.raspi.home" {
    proxy.server = ( "" => ( ( "host" =>  "192.168.1.138", "port" => 3838 ) ) )
}

Tenga en cuenta que cambié el destino "port"en mis ejemplos anteriores, ya que supongo que es el host y el puerto de destino del proxy inverso al que le gustaría que lighttpd haga un proxy inverso de la solicitud a http: //shiny.raspi.home/