Jak zapobiec nginx z podkatalogów specyficznych dla proxy proxy

11

Na Apache możesz ProxyPass wszystko oprócz jednego lub więcej podkatalogów (z „!”).

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

Co to jest odpowiednik Nginx?

Moje pierwsze przypuszczenie oczywiście nie działa:

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

 location / {
      proxy_pass http://localhost:9999/ ;
  }
Falken
źródło

Odpowiedzi:

11

Możesz powiązać proxy_pass z DOKŁADNIE ścieżką, którą lubisz, w ten sposób

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

To gwarantuje, że żadna inna ścieżka nie zostanie przekazana, ale /

LUB

możesz użyć tej składni tylko do dopasowania podkatalogów

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

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

^~Dopasowuje podkatalog a następnie przeszukuje więc /nie będą realizowane. Jest to opisane tutaj .

Christopher Perrin
źródło
root / var / www / site / subdir powinien być root / var / www / site w moim przypadku, w przeciwnym razie nginx spróbuje uzyskać dostęp do / var / www / site / subdir / subdir.
Tinus
Masz rację. Albo to, albo możesz użyć aliaszamiastroot
Christopher Perrin
1
Czy mógłbyś to wyjaśnić ^~? Nie mogłem zrozumieć, co to robi. Próbowałem przeczytać przesłany link, ale nadal nie mogę go uzyskać. Jeśli najdłużej pasująca lokalizacja prefiksu ma modyfikator „^ ~”, wówczas wyrażenia regularne nie są sprawdzane.
Mohammed Noureldin
@MohammedNoureldin oznacza to zasadniczo, że próbuje dopasować prefiks na ścieżce i nie ocenia wyrażeń regularnych.
Christopher Perrin
1
@MohammedNoureldin jest to pierwsza część ścieżki, której chcesz użyć dla lokalizacji. I tak, to bez wyrażeń regularnych.
Christopher Perrin