Modifica le pagine HTML restituite dal proxy inverso nginx


17

Ho una configurazione proxy inversa per l'accesso a un'applicazione di terzi situata all'interno di una rete Intranet da Internet. Supponiamo che questa applicazione sia nell'URL:

https://internalserver:8080/ (raggiungibile solo dall'Intranet)

e il proxy è attivo:

https://proxyserver/ (raggiungibile da qualsiasi parte del mondo)

Il proxy è gestito da nginx e funziona bene. Quando l'utente accede https://proxyserver/ , ottiene il contenuto dell'app all'indirizzo https://internalserver:8080/.

Il problema è che l'applicazione sta scrivendo URL assoluti nella risposta HTML, quindi, quando l'utente fa clic su un collegamento a una nuova pagina, il browser tenta di individuare la pagina con il suo nome interno, ad esempio https://internalserver:8080/somepage anziché https://proxyserver/somepage.

So che si tratta di un bug del programma, ma non sono in grado di modificare il programma.

Posso intercettare la risposta, modificare gli URL e inviarlo (modificato) al client finale con nginx? O forse con un altro strumento?

EDIT: ho visto questa domanda prima, ma il mio caso è più specifico, la domanda citata richiede una modifica generica. In tal caso, il programma ad hoc fast-cgi è la soluzione migliore, quello che voglio è una soluzione più specifica per (penso) uno scenario più comune. mentre un programma in cgi veloce può funzionare Sto cercando una soluzione più semplice, forse più forte e dimostrata nel mondo reale, per questo scenario.


1
possibile duplicato di dati Modifica
inoltrati

Risposte:



3

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

Il modulo ngx_http_sub_module è un filtro che modifica una risposta sostituendo una stringa specificata con un'altra.

Questo modulo non è creato per impostazione predefinita, dovrebbe essere abilitato con il parametro di configurazione --with-http_sub_module.

Esempio di configurazione

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.