Comment empêcher Nginx de sous-répertoires spécifiques au proxy inverse

11

Sur Apache, vous pouvez tout ProxyPass sauf un ou plusieurs sous-répertoires (avec "!").

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Qu'est-ce que l'équivalent Nginx?

Ma première supposition ne fonctionne évidemment pas:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }
Falken
la source

Réponses:

11

Vous pouvez lier le proxy_pass à EXACTEMENT le chemin que vous aimez, comme ceci

location = / {
    proxy_pass http://localhost:9999/;
}

Cela garantit qu'aucun autre chemin ne sera transmis, mais /

OU

vous pouvez utiliser cette syntaxe uniquement pour les sous-répertoires à mettre en correspondance

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

Le ^~correspond au sous-répertoire puis arrête la recherche afin que le /ne soit pas exécuté. Il est décrit ici .

Christopher Perrin
la source
root / var / www / site / subdir devrait être root / var / www / site dans mon cas, sinon nginx essaiera d'accéder à / var / www / site / subdir / subdir.
Tinus
Tu as raison. Soit cela, soit vous pouvez utiliser à la aliasplace deroot
Christopher Perrin
1
Pourriez-vous expliquer cela ^~davantage? Je ne pouvais pas savoir ce que ça faisait. J'ai essayé de lire le lien que vous avez envoyé, mais je ne parviens toujours pas à l'obtenir. Si l'emplacement du préfixe correspondant le plus long a le modificateur «^ ~», les expressions régulières ne sont pas vérifiées.
Mohammed Noureldin
@MohammedNoureldin, cela signifie essentiellement qu'il essaie de faire correspondre un préfixe sur un chemin et n'évalue pas les expressions régulières.
Christopher Perrin
1
@MohammedNoureldin c'est la première partie du chemin que vous souhaitez utiliser pour l'emplacement. Et oui c'est sans regex.
Christopher Perrin