web-dev-qa-db-fra.com

Rediriger un sous-path contre un hôte externe avec Nginx

J'ai besoin de créer une carte assez simple dans Nginx redirigeant un sous-path sur un autre serveur situé dans le même sous-réseau.

  • Server Nginx: 192.168.0.2
  • Tomcat Server: 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'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 que je manque dans cette CONF?

15
carlo.polisini

Regardons votre ligne de réécriture:

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

Vous prenez le bit entre parenthèses (c'est-à-dire tout après /tomcatapi/), qui est assigné à $1, et en utilisant cela comme le seul contenu de votre URI réécrit.

Dans votre exemple, il n'y a rien après /tomcatapi/, la réécriture finit donc de vider, et c'est ce que Nginx gémit.

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

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

ensuite, vous finirez toujours avec au moins / Dans la sortie de réécriture.

14
Flup