Jak mogę mieć tę samą regułę dla dwóch lokalizacji w konfiguracji NGINX?
Wypróbowałem następujące
server {
location /first/location/ | /second/location/ {
..
..
}
}
ale przeładowanie nginx zwróciło ten błąd:
nginx: [emerg] invalid number of arguments in "location" directive**
nginx
nginx-location
user1661010
źródło
źródło
nginx/1.13.2
proxy_pass
popracować, zobacz tę odpowiedź: stackoverflow.com/a/46625656/1246870Inną opcją jest powtórzenie reguł w dwóch lokalizacjach prefiksów przy użyciu dołączonego pliku. Ponieważ lokalizacje prefiksów są niezależne od pozycji w konfiguracji, ich użycie może zaoszczędzić trochę zamieszania podczas późniejszego dodawania innych lokalizacji wyrażeń regularnych. Unikanie lokalizacji wyrażeń regularnych, gdy możesz, pomoże w płynnym skalowaniu konfiguracji.
Oto przykład shared.conf:
źródło
shared.conf
przykład i lokalizację?Zarówno wyrażenie regularne, jak i dołączone pliki są dobrymi metodami i często ich używam. Ale inną alternatywą jest użycie „nazwanej lokalizacji”, co jest przydatne w wielu sytuacjach - szczególnie tych bardziej skomplikowanych. Oficjalny „Jeśli jest zła” strona pokazuje zasadniczo następującą jako dobry sposób do robienia rzeczy:
Te różne podejścia mają zalety i wady. Dużą zaletą wyrażenia regularnego jest to, że możesz przechwytywać części dopasowania i używać ich do modyfikowania odpowiedzi. Oczywiście podobne wyniki można zwykle osiągnąć innymi podejściami, ustawiając zmienną w oryginalnym bloku lub używając
map
. Wadą podejścia wyrażeń regularnych jest to, że może stać się nieporęczne, jeśli chcesz dopasować różne lokalizacje, a niski priorytet wyrażenia regularnego może po prostu nie pasować do tego, jak chcesz dopasować lokalizacje - nie wspominając o widocznym wpływie na wydajność w niektórych przypadkach z wyrażeń regularnych.Główną zaletą dołączania plików (o ile wiem) jest to, że jest trochę bardziej elastyczne w kwestii tego, co można dołączyć - na przykład nie musi to być pełny blok lokalizacji. Ale jest też subiektywnie nieco bardziej zagmatwany niż nazwane lokalizacje.
Pamiętaj również, że istnieje powiązane rozwiązanie, którego możesz użyć w podobnych sytuacjach: lokalizacje zagnieżdżone. Chodzi o to, aby zacząć od bardzo ogólnej lokalizacji, zastosować pewną konfigurację wspólną dla kilku możliwych dopasowań, a następnie utworzyć oddzielne zagnieżdżone lokalizacje dla różnych typów ścieżek, które chcesz dopasować. Na przykład może być przydatne zrobienie czegoś takiego:
źródło
To krótkie, ale skuteczne i sprawdzone podejście:
location ~ (patternOne|patternTwo){ #rules etc. }
Można więc łatwo mieć wiele wzorców z prostą składnią potoku wskazującą na ten sam blok / reguły lokalizacji.
źródło