Question Rediriger un sous-chemin vers un hôte externe avec Nginx


J'ai besoin de créer une carte assez simple dans Nginx pour rediriger un sous-chemin vers un autre serveur situé dans le même sous-réseau.

  • Serveur Nginx: 192.168.0.2
  • Serveur Tomcat: 192.168.0.3:8443

J'ai essayé de mettre cela dans la section serveur

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

mais tout ce que j'ai accès http://www.myservice.com/tomcatapi/ est une page d'erreur 500 et dans le fichier journal nginx, j'ai cette erreur:

    the rewritten URI has a zero length

Qu'est-ce qui me manque dans cette conf?


8
2017-08-01 10:07


origine




Réponses:


Regardons votre ligne de réécriture:

rewrite /tomcatapi/(.*) $1 break;

Vous prenez le bit entre parenthèses (c.-à-d. Tout après /tomcatapi/), qui est assigné à $1, et l’utiliser comme seul contenu de votre URI réécrit.

Dans votre exemple, il n'y a rien après /tomcatapi/, donc la réécriture finit par être vide, et c’est ce dont se lamente nginx.

Si vous modifiez la règle de réécriture en

rewrite /tomcatapi/(.*) /$1 break;

alors vous finirez toujours avec au moins / dans la sortie de réécriture.


10
2017-08-01 10:51



Merci pour votre réponse, de toute façon, j’ai ajouté le "/", mais en accédant maintenant à l’URL, le navigateur est bloqué en cours de chargement et dans le fichier journal, une erreur différente apparaît: en amont, aucun en-tête HTTP / 1.0 valide n’a été lu lors de la lecture de l’en-tête de réponse en amont. - carlo.polisini
Que disent les journaux sur votre serveur tomcat? - Flup
J'ai trouvé l'erreur, l'erreur était que l'application n'était disponible que sur https et non sur http! Donc, la syntaxe était juste après votre correction, vient de remplacer http par https pour que cela fonctionne. - carlo.polisini