nginx -> Tomcat avec chemin de dossier – trop de redirections

J’essaie d’utiliser nginx comme proxy inverse pour deux instances Tomcat, chacune dans leur propre machine virtuelle. Le problème est le suivant: lorsque je commence à append un chemin de dossier à l’argument proxy_pass, je reçois une erreur 310: Trop de redirections.

Qu’est-ce que je fais mal? Tout conseil est apprécié. Le premier serveur fonctionne correctement, mais comme mentionné précédemment, le second, avec le chemin de dossier ajouté, ne fonctionnera pas.

Voici ma configuration nginx:

server { listen 80; server_name oc.domain.tld; location / { proxy_pass http://172.16.81.73; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name test.domain.tld; location / { proxy_pass http://172.16.75.99/OpenClinica/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80 default_server; server_name _; return 444; } 

edit: il n’y a pas de SSL activé pour le moment (à la fois tomcat & nginx)

edit2: mon journal de réécriture est vide (si je l’allume, débogage au niveau de la notification)
Je viens de découvrir ces lignes dans mon journal nginx (la ligne GET … / login / login est répétée environ 20 fois:

 190.215.166.212 - - [04/May/2013:22:29:21 -0400] "GET /OpenClinica/pages/login/login HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31" 190.215.166.212 - - [04/May/2013:22:29:21 -0400] "GET /OpenClinica/pages/login/login HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31" 190.215.166.212 - - [04/May/2013:22:29:25 -0400] "-" 400 0 "-" "-" 190.215.166.212 - - [04/May/2013:22:29:25 -0400] "-" 400 0 "-" "-" 

Il semble que nginx demande …. login / login dans une boucle. Donc, le problème est peut-être du côté tomcat?

Je pense que ce qui se passera probablement, c’est que la redirection se produit du côté de Tomcat, plutôt que du côté de Nginx, alors je pense que vous ne nous avez peut-être pas donné suffisamment d’informations pour le comprendre.

Cependant, vous pouvez facilement étudier ce problème en activant le journal de réécriture pour Nginx en ajoutant:

 rewrite_log on; 

Vous seriez alors en mesure de voir exactement ce qu’il réécrit et si / où il entre en boucle, si c’est du côté Nginx.

MODIFIER

Je viens de découvrir ces lignes dans mon journal nginx (la ligne GET … / login / login est répétée environ 20 fois: GET / OpenClinica / pages / login / login GET / OpenClinica / pages / login / login

Cela semble définitivement que la redirection se produit uniquement à l’intérieur de Tomcat plutôt que d’être une redirection Nginx interne car les requêtes sont passées correctement entre elles, mais votre navigateur peut voir qu’il est redirigé vers le même endroit tout le temps.

Je ne peux pas être sûr des détails exacts sans voir tout le code pertinent, mais il semble que du code fasse l’équivalent de:

  1. L’utilisateur est-il connecté ou sur la page de connexion à / pages / login / login?
  2. Nope – les redirect vers la page de connexion à / pages / login / login

Parce que Nginx utilise la requête pour:

 http://172.16.75.99/OpenClinica/; 

Il ajoute toujours OpenClinica au début de l’URL pour que l’application Java pense qu’elle n’est jamais /pages/login/login , elle continue donc à redirect.

Vous pouvez résoudre ce problème en rendant la redirection Java plus intelligente ou en modifiant la configuration du proxy pour supprimer le chemin OpenClinica

 proxy_pass http://172.16.75.99 

Sans barre oblique de fin pour que le chemin de l’URL soit transmis au serveur Tomcat exactement comme l’utilisateur l’a demandé.

(Vous pouvez également être en mesure de définir cela en définissant le chemin appBase pour l’application dans Tomcat, afin qu’il sache qu’il doit s’attendre à des chemins d’URL commençant par OpenClinica – mais je ne suis pas un expert Tomcat.)