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/ ;
  }

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 .


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
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.