24 votes

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

J'ai besoin de créer une carte assez simple dans Nginx redirigeant un sous-chemin vers un autre serveur qui est 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 ceci dans la section serveur

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

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

    the rewritten URI has a zero length

Qu'est-ce que je manque dans cette conf ?

20voto

Flup Points 7496

Regardons votre ligne de réécriture :

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

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

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

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

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

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

0 votes

Merci pour votre réponse, de toute façon j'ai ajouté le "/" mais maintenant en accédant à l'url le navigateur est bloqué dans l'état de chargement et dans le fichier journal je vois maintenant une erreur différente : upstream sent no valid HTTP/1.0 header while reading response header from upstream

0 votes

Que disent les journaux de votre serveur Tomcat ?

0 votes

J'ai trouvé l'erreur, l'erreur était que l'application était disponible uniquement en https et non en http ! La syntaxe était donc correcte après votre correction, il suffisait de remplacer http par https pour que cela fonctionne.

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