Modificar páginas HTML devueltas por el proxy inverso nginx


17

Tengo una configuración de proxy inverso para acceder a una aplicación de terceros ubicada dentro de una intranet desde Internet. Digamos que esta aplicación está en la URL:

https://internalserver:8080/ (accesible solo desde la intranet)

y el proxy está encendido:

https://proxyserver/ (accesible desde cualquier lugar del mundo)

El proxy es administrado por nginx y funciona bien. Cuando el usuario accede https://proxyserver/ , obtiene el contenido de la aplicación en https://internalserver:8080/.

El problema es que la aplicación está escribiendo URL absolutas en la respuesta HTML, por lo que, cuando el usuario hace clic en un enlace a una nueva página, el navegador intenta localizar la página con su nombre interno, por ejemplo, en https://internalserver:8080/somepage lugar de https://proxyserver/somepage.

Sé que este es un error del programa, pero no puedo modificar el programa.

¿Puedo interceptar la respuesta, modificar las URL y enviarla (modificada) al cliente final con nginx? O tal vez con otra herramienta?

EDITAR: Vi esta pregunta antes, pero mi caso es más específico, la pregunta citada pide una modificación genérica. En ese caso, el programa ad hoc fast-cgi es la mejor solución, lo que quiero es una solución más específica para (creo) un escenario más común. Si bien un programa cgi rápido puede funcionar, estoy buscando una solución más fácil y quizás más fuerte y probada en el mundo real para este escenario.


1
posible duplicado de datos
Cristian Ciupitu

Respuestas:



3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

El módulo ngx_http_sub_module es un filtro que modifica una respuesta al reemplazar una cadena especificada por otra.

Este módulo no está construido de manera predeterminada, debe habilitarse con el parámetro de configuración --with-http_sub_module.

Configuración de ejemplo

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.