Ответ 1
очень распространенная строка try_files, которая может быть применена к вашему состоянию
location / {
try_files $uri $uri/ /test/index.html;
}
вы, вероятно, понимаете первую часть, location /
соответствует всем местоположениям, если только это не соответствует более определенному местоположению, например location /test
, например
Вторая часть (try_files
) означает, что когда вы получаете URI, который соответствует этому блоку, попробуйте $uri
сначала, например http://example.com/images/image.jpg
nginx попытается проверить, есть ли файл внутри /images
, называемый image.jpg
если найден, он будет обслуживать его первым.
Второе условие $uri/
, что означает, что если вы не нашли первое условие $uri
, попробуйте URI в качестве каталога, например http://example.com/images/
, ngixn сначала проверит, существует ли файл с именем images
, тогда он не найдет его, затем перейдет ко второй проверке $uri/
и посмотрит, существует ли каталог с именем images
, и он попробует его обслуживать.
Боковое примечание: если у вас нет autoindex on
, вы, вероятно, получите 403 запрещенную ошибку, поскольку список каталогов запрещен по умолчанию.
EDIT: я забыл упомянуть, что если у вас есть
index
, nginx попытается проверить, существует ли индекс внутри этой папки до примерный список каталогов.
Третье условие /test/index.html
считается опцией возврата (вам нужно использовать как минимум 2 варианта, один и задний), вы можете использовать столько, сколько сможете (никогда не читайте сужения до), nginx будет искать файл index.html
внутри папки test
и обслуживать его, если он существует.
Если третье условие также терпит неудачу, то nginx будет обслуживать страницу ошибки 404.
Также есть что-то, называемое именованными местами, например
location @error {
}
Вы можете называть его try_files
следующим образом
try_files $uri $uri/ @error;
СОВЕТ. Если у вас есть только одно условие, которое вы хотите обслуживать, например, внутри папки images
, вы хотите только выполнить изображение или перейти к ошибке 404, вы можете написать строку как это
location /images {
try_files $uri =404;
}
что означает либо служить файлу, либо служить ошибке 404, вы не можете использовать только $uri
самостоятельно без =404
, потому что вам нужно иметь резервную опцию.
Вы также можете выбрать, какой код ошибки вы хотите, например:
location /images {
try_files $uri =403;
}
Это покажет запрещенную ошибку, если изображение не существует, или если вы используете 500, оно покажет ошибку сервера и т.д.