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?

carlo.polisini
la source

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.

Flup
la source
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