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.