2 votes

Proxy inverse pour 3 sites Web, tous sur le contexte racine

Nous sommes confrontés au problème suivant et essayons de comprendre quelle est la meilleure façon de le gérer. L'objectif général est le suivant :

--> example.com/app1         -->  app1.com/
--> example.com/app1/images  -->  app1.com/images

--> example.com/app2         -->  app2.com/
--> example.com/app2/images  -->  app2.com/images

--> example.com/app3         -->  app3.com/
--> example.com/app3/images  -->  app3.com/images

Nous avons envisagé les solutions suivantes, certaines fonctionnent et d'autres non. Nous essayons de comprendre quelle est la meilleure façon de procéder car nous ne sommes en aucun cas des experts. Jusqu'à présent, l'outil que nous utilisons est Nginx pour effectuer le proxy inverse, mais l'outil n'a pas vraiment d'importance, nous sommes ouverts à tout.

Solution 1

Nginx réécrit le texte du corps pour ajouter "app1" pour les requêtes d'app1, etc. Comme dans l'exemple ci-dessus, il y a une demande pour app1 et un index.html revient. Cet index.html contient ensuite une balise qui ressemble à ![](images/hello.png). Cela ne fonctionnera évidemment pas, donc nous réécrivons le corps (c'est-à-dire l'index.html) pour dire ![](app1/images/hello.png).

Problème avec la Solution 1

Nous devons être très vigilants sur la manière dont nous rédigeons les règles de réécriture du corps, sinon nous pourrions réécrire quelque chose que nous n'avions pas l'intention de faire et ainsi casser un peu de JS ou de HTML. Cette solution ne fonctionne également pas pour une partie du code JS (nous utilisons Angular) qui n'écrit pas implicitement l'emplacement des vues et qui est plutôt assemblé par le framework lui-même.

Solution 2

Déplacez chaque application de la racine vers son propre dossier. Cela signifie que toute demande d'image ou autre sera mise à jour en ![](app1/images/hello.png).

Problème avec la Solution 2

Nous devons changer les 3 sites web existants pour demander des ressources à partir de leurs nouvelles racines respectives.

Toute aide serait grandement appréciée, merci d'avance.

0 votes

Idéalement, évitez de réécrire le document dans le proxy -- si vous pouvez rediriger exemple.com/app1 --> exemple.com/app1/ avant d'appliquer le proxy inversé, vos urls relatives fonctionneraient.

2voto

snowdude Points 2790

Idéalement, vous pouvez redéployer vos applications de sorte que chaque application soit installée dans http://app.com/app au lieu de la racine du document.

Sinon, peut-être pouvez-vous rendre les liens relatifs, au lieu de lier à /images/logo.png lier à ../images/logo.png ou images/logo.png ou ../../images/logo.png selon la page qui est servie, ce qui se traduira correctement dans une situation de Proxy Inverse.

Évidemment, l'utilisation de sous-domaines pour chaque application fonctionnera assez bien, en redirigeant tout sur app.exemple.com/ vers votre interne app.com/

Normalement, un proxy inverse ne réécrira pas le contenu du corps de réponse qu'il reçoit du serveur auquel la requête a été renvoyée, mais Apache vous permettra de le faire:

   ProxyPass http://app1.com/
   ProxyPassReverse http://app1.com/ 
   # réécrire le corps de la réponse  
   AddOutputFilterByType SUBSTITUTE text/html
   Substitute "s|/images/|/app1/images/|i"

0 votes

Merci, nous avons pensé que si nous n'avions rien oublié, le meilleur moyen de continuer serait de rendre tout lien relatif ou d'avoir son propre contexte racine. Merci.

0voto

Sal Points 1

Vous pouvez utiliser nginx en tant que proxy inverse pour le domaine example.com.

Donc dans le fichier de configuration du site nginx pour example.com, vous pouvez définir une phrase de réécriture pour accomplir ce que vous cherchez.

Vous pouvez consulter ce guide : http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html & https://www.digitalocean.com/community/articles/how-to-configure-nginx-as-a-front-end-proxy-for-apache

En espérant que cela fonctionne pour vous.

)

0 votes

Nous l'utilisons actuellement comme proxy inversé, et cela fonctionne pour la demande initiale. Le problème survient avec les demandes suivantes pour des ressources que les fichiers supposent être sur la racine du contexte mais qui se trouvent en réalité un niveau en dessous. Nous ne savons pas si une demande d'images/hello.png provient de l'application 1, de l'application 2 ou de l'application 3.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X