bardzo częstym linia try_files, które mogą być stosowane od stanu jest
location/{
try_files $uri $uri/ /test/index.html;
}
prawdopodobnie zrozumieć pierwszej części location /
mecze wszystkie lokalizacje, chyba że są dopasowane przez dokładniejszą lokalizację, na przykład location /test
, na przykład
Druga część (try_files
) oznacza, że po otrzymaniu identyfikatora URI dopasowanego przez ten blok najpierw spróbuj $uri
, na przykład http://example.com/images/image.jpg
nginx spróbuje sprawdzić, czy w pliku /images
znajduje się plik o nazwie image.jpg
, jeśli został znaleziony, aby go najpierw udostępnić.
Drugi warunek jest $uri/
co oznacza, jeśli nie znaleźliśmy pierwszy warunek $uri
spróbować URI w katalogu, na przykład http://example.com/images/
, ngixn najpierw sprawdzić, czy istnieje plik o nazwie images
to przyzwyczajenie go znaleźć, a następnie udaje się do drugi check $uri/
i sprawdź, czy istnieje katalog o nazwie images
, to spróbuje go wyświetlić.
uwaga Side: jeśli nie masz autoindex on
będziesz prawdopodobnie uzyskać 403 błędu zabronione, ponieważ listing katalogu jest zabronione domyślnie.
EDIT: Zapomniałem wspomnieć, że jeśli masz index
zdefiniowane, nginx spróbuje sprawdzić, czy indeks istnieje wewnątrz tego folderu przed próbuje listę katalogów.
Trzeci warunek /test/index.html
jest uważany za upadek z powrotem opcja, (trzeba użyć co najmniej 2 opcje, jeden i cofać), można użyć tyle, ile można (nie czytać z przewężeniem wcześniej) , nginx wyszuka plik index.html
w folderze test
i wyświetli go, jeśli istnieje.
Jeśli trzeci warunek również się nie powiedzie, to nginx wyświetli stronę błędu 404.
Ponadto istnieje coś, co nazywa nazwane lokalizacje, tak
location @error {
}
można nazwać z try_files
jak ten
try_files $uri $uri/ @error;
TIP: Jeśli masz tylko 1 warunek, który ma służyć, jak na przykład wewnątrz folderu images
chcesz tylko podać obraz lub przejść do błędu 404, możesz napisać linię taką jak ta
location /images {
try_files $uri =404;
}
co oznacza, że należy podać plik lub podać błąd 404, nie można użyć tylko $uri
przez niego bez numeru =404
, ponieważ konieczne jest skorzystanie z opcji zastępczej.
Można również wybrać Który kiedykolwiek kod błędu, który ma, jak na przykład:
location /images {
try_files $uri =403;
}
To pokaże zabronionego błąd, jeśli obraz nie istnieje, lub jeśli używasz 500 to pokaże błąd serwera, etc ..
co miałeś na myśli kończąc '/' w linii 'try_files'? –
Znaczenie opcji zastępczej to "/". Postać tuż przed ";" w tej linii. – Jonah
cóż, musi to być plik, a nie URI, więc użyj $ uri/lub użyj /index.html –