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


13

J'ai besoin de créer une carte assez simple dans Nginx redirigeant un sous-chemin vers un autre serveur qui se trouve 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'accède à 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?

Réponses:


12

Regardons votre ligne de réécriture:

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

Vous prenez le bit entre parenthèses (c'est-à-dire tout ce qui suit /tomcatapi/), qui est attribué à $1, et vous l'utilisez comme seul contenu de votre URI réécrit.

Dans votre exemple, il n'y a rien après /tomcatapi/, donc la réécriture se termine vide, et c'est ce que gémit nginx.

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

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

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


Merci pour votre réponse, de toute façon j'ai ajouté le "/" mais maintenant j'accède à l'url, le navigateur est bloqué dans l'état de chargement et dans le fichier journal, je vois maintenant une erreur différente: en amont n'a envoyé aucun en-tête HTTP / 1.0 valide 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 http! La syntaxe était donc juste après votre correction, il suffit de remplacer http par https pour le faire fonctionner.
carlo.polisini
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.