Modifier les pages HTML renvoyées par le proxy inverse nginx

17

J'ai une configuration de proxy inverse pour accéder à une application tierce située dans un intranet à partir d'Internet. Disons que cette application est sur l'URL:

https://internalserver:8080/ (accessible uniquement depuis l'intranet)

et le proxy est sur:

https://proxyserver/ (accessible depuis n'importe quel endroit dans le monde)

Le proxy est géré par nginx et fonctionne correctement. Lorsque l'utilisateur accède, https://proxyserver/ il obtient le contenu de l'application sur https://internalserver:8080/.

Le problème est que l'application écrit des URL absolues dans la réponse HTML. Ainsi, lorsque l'utilisateur clique sur un lien vers une nouvelle page, le navigateur essaie de localiser la page avec son nom interne, par exemple https://internalserver:8080/somepage au lieu de https://proxyserver/somepage.

Je sais que c'est un bug de programme, mais je ne suis pas en mesure de modifier le programme.

Puis-je intercepter la réponse, modifier les URL et l'envoyer (modifié) au client final avec nginx? Ou peut-être avec un autre outil?

EDIT: J'ai déjà vu cette question , mais mon cas est plus spécifique, la question citée demande une modification générique. Dans ce cas, le programme ad hoc fast-cgi est la meilleure solution, ce que je veux, c'est une solution plus spécifique pour (je pense) un scénario plus courant. alors qu'un programme cgi rapide peut fonctionner, je cherche une solution plus simple et peut-être plus forte et éprouvée dans le monde réel, une solution pour ce scénario.

PCJ
la source
1
possible doublon de données Modify étant mandaté par nginx à la volée
Cristian Ciupitu

Réponses:

3

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

Le module ngx_http_sub_module est un filtre qui modifie une réponse en remplaçant une chaîne spécifiée par une autre.

Ce module n'est pas construit par défaut, il doit être activé avec le paramètre de configuration --with-http_sub_module.

Exemple de configuration

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
Voro
la source