Priorytet lokalizacji Nginx

186

W jakiej kolejności uruchamiane są dyrektywy lokalizacyjne?

użytkownik650505
źródło

Odpowiedzi:

352

Z dokumentacji modułu podstawowego HTTP :

  1. Dyrektywy z prefiksem „=”, które dokładnie pasują do zapytania. Jeśli znaleziono, wyszukiwanie zostanie zatrzymane.
  2. Wszystkie pozostałe dyrektywy z konwencjonalnymi ciągami. Jeśli w tym dopasowaniu użyto prefiksu „^ ~”, wyszukiwanie zostanie przerwane.
  3. Wyrażenia regularne, w kolejności, w jakiej są zdefiniowane w pliku konfiguracyjnym.
  4. Jeśli # 3 dało dopasowanie, wynik ten zostanie wykorzystany. W przeciwnym razie zostanie użyte dopasowanie z nr 2.

Przykład z dokumentacji:

location  = / {
  # matches the query / only.
  [ configuration A ] 
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ] 
}
location /documents/ {
  # matches any query beginning with /documents/ and continues searching,
  # so regular expressions will be checked. This will be matched only if
  # regular expressions don't find a match.
  [ configuration C ] 
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration D ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration D.   
  [ configuration E ] 
}

Jeśli nadal jest mylące, oto dłuższe wyjaśnienie .

Martin Redmond
źródło
9
z tym może ci pomóc :) github.com/detailyang/nginx-location-match-visible
user2228392
4
Pamiętaj, że obie reguły /i /documents/reguły pasują do żądania /documents/index.html, ale ta ostatnia ma pierwszeństwo, ponieważ jest najdłuższą regułą.
arrakis_sun
69

Wystrzeliwuje w tej kolejności.

  1. = (dokładnie)

    location = /path

  2. ^~ (dopasowanie do przodu)

    location ^~ /path

  3. ~ (wielkość liter ma znaczenie)

    location ~ /path/

  4. ~* (wyrażenie regularne nie rozróżnia wielkości liter)

    location ~* .(jpg|png|bmp)

  5. /

    location /path

Don Dilanga
źródło
3
^ ~ (mecz do przodu) bardzo ważny
iwind