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.
Réponses:
Voici une vidéo Nginx officielle sur YouTube qui illustre la réécriture de contenu en ligne.
https://youtu.be/7Y7ORypoHhE?t=20m22s
En effet avec sub_filter
http://nginx.org/en/docs/http/ngx_http_sub_module.html
Dans votre cas, vous regardez quelque chose comme:
la source
http://nginx.org/en/docs/http/ngx_http_sub_module.html
la source