7 votos

Solución para Reverse proxy en las direcciones URL que no son susceptibles de ser reubicados en un subdirectorio

Cuento Corto
Gah! Ojalá los desarrolladores que hicieron de administración de interfaces se exponga a una "webroot=/myAppAppearsHere" opción, o hacer que todos los enlaces relativos.

Largo De La Historia

Tengo un portal de administración para un cliente que es, básicamente, un apache mod_auth de inicio de sesión y, a continuación, una serie de enlaces a páginas de administración, como así;

https://portal.mysite.com/login    
https://portal.mysite.com/

y luego un montón de enlaces como así

https://portal.mysite.com/monitoring   -> https://nagios.localdomain/nagios
https://portal.mysite.com/munin     -> https://munin.localdomain/nagios
https://portal.mysite.com/bacukups     -> https://backups.localdomain/backups

Sin embargo, hay un par de aplicaciones que realmente no contento con ser reverse proxy a un subdirectorio, por ejemplo, chef-server-webui y la logstash de la interfaz web.

ProxyPassReverse se reasignación de los encabezados, pero todos los internos de direcciones URL absolutas necesitan ser alterados y si no hay ninguna opción para ello en la aplicación de configuración, entonces este tiene que ser coaccionado en el código HTML de respuesta.

La obvia táctica es crear subdominios, o comodín subdominios para asignar a estas aplicaciones como;

https://chef.mysite.com/   -> https://chefserver.localdomain:4040/
https://logstash.mysite.com/   -> https://logstash.localdomain/
https://*.mysite.com/   -> https://($1).localdomain/

Pero por desgracia no estoy en control de la administración del dominio y la obtención de estas incorporaciones es posible, pero un dolor. (pero yo preferiría una solución que no requiere algunas 3ª parte que estar involucrados para cada nuevo link) (soy consciente de wild-card solucionaría esto, pero estoy interesado en ver lo que HTTP apache y las alternativas basadas en la hay ... para el aprendizaje, etc ;-)

Así que me he mudado a la utilización de la Apache2::ModProxyPerlHtml que es similar a mod_proxy_html, y permite la reasignación dinámica de las cadenas en los docs. Esta realidad hace el trabajo con alguna combinación de LocationMatch y ProxyHTMLRewrite incluso puedo obtener el código de javascript para jugar bonito. Sin embargo es una enorme bola de dolor de cada uno, especialmente de la falta de la web 1.0 aplicaciones.

Por ejemplo, la siguiente casi correcciones logstash para que funcione correctamente bajo /logstash;

<LocationMatch "^/logstash/">

    RequestHeader   unset   Accept-Encoding
    PerlSetVar ProxyHTMLVerbose "On"
    PerlInputFilterHandler Apache2::ModProxyPerlHtml
    PerlOutputFilterHandler Apache2::ModProxyPerlHtml
    SetHandler perl-script
    PerlAddVar ProxyHTMLRewrite "/style.css /logstash/style.css"
    PerlAddVar ProxyHTMLRewrite "/css/smoothness/jquery-ui-1.8.5.custom.css /logstash/css/smoothness/jquery-ui-1.8.5.custom.css"
    PerlAddVar ProxyHTMLRewrite "/js/jquery-1.6.1.min.js /logstash/js/jquery-1.6.1.min.js"
    PerlAddVar ProxyHTMLRewrite "action='/search' action='/logstash/search'"
    PerlAddVar ProxyHTMLRewrite "/js/jquery-ui-1.8.13.min.js /logstash/js/jquery-ui-1.8.13.min.js"
    PerlAddVar ProxyHTMLRewrite "/media/throbber.gif /logstash/media/throbber.gif"

    PerlAddVar ProxyHTMLRewrite "/api/search /logstash/api/search"
    PerlAddVar ProxyHTMLRewrite "/api/histogram /logstash/api/histogram"

</LocationMatch>

Pero su muy golpeado y se pierda, y no sólo puede comodín de la dirección URL de intercambio, porque no es carga de JSON y javascript que se presenta alterados.

Yo estaba pensando en algún tipo de "cookie" o querystring var que el seguimiento de la actual Proxy Servidor, de manera que apache podría dinámicamente redirigir la solicitud en el sistema correcto.. Algo como esto;

https://admin.mysite.com/?request-proxy=chef -> https://chefserver.localdomain:4040/
https://admin.mysite.com/?request-proxy=logstash  -> https://logstash.localdomain/

Y básicamente, como apache consigue último vistazo a todo el servidor HTTP de contenido, podría dinámicamente etiqueta url con la consulta adicional vars &solicitud de proxy=logstash. Sin embargo, yo estoy pensando que iba a sufrir el mismo problema que el ModProxyPerlHtml/mod_proxy_html solución en la que no volvería a trabajar en todas partes, especialmente en aplicaciones donde algunos de javascript se utiliza para bejiggle con la CONSULTA params lado del cliente.

Supongo que una cookie, casi con el trabajo, en la que se podía Proxy basado en algunos pasaron el valor de la cookie decir "solicitud de proxy=logstash", sin embargo esto podría sufrir un problema si usted tiene 2 pestañas abiertas para el sitio, ya que probablemente iba a escribir sobre cada uno de los otros cookies.

Sé que algunas aplicaciones solo tener algún tipo de acercamiento de fuerza bruta y envuelva todo el proxy solicitud en volver al horno html, tales como el dispositivo Netscreen SA-3000.

De todos modos, ¿hay alguna módulos de apache que implementar cualquiera de estas estrategias, o de alguna manera un paso lateral de la escritura de reglas de coincidencia para cada proxy sitio.?

  1. ps soy consciente de lemonldap, pero no me llega muy lejos sin tener que sumergirse en el código perl. A pesar de que se ve bien y la voy a tomar otro aspecto en el futuro.
  2. Estoy empezando a sospechar que el tiempo no me acaba de pasar el tiempo de reasignación de estas páginas HTML con ModProxyPerlHtml, porque no habrá una única solución.

1voto

Tom H Puntos6181

mod_substitute hace el trabajo muy bien;

Resumen: mod_substitute proporciona un mecanismo para realizar la expresión regular y sustituciones de cadena fija a los organismos de respuesta.

Solo toma un poco de tiempo de trabajo a través de las reglas de asignación.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: