очень распространенная 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;
TIP: Если у вас есть только 1 условие, которое вы хотите служить, например, внутри папки images
вы хотите либо обслуживать изображение, либо перейти к ошибке 404, вы можете написать такую строку
location /images {
try_files $uri =404;
}
, что означает служить либо файл или служить 404 ошибку, вы не можете использовать только $uri
на это сам без =404
, потому что нужно иметь запасной вариант.
Вы также можете выбрать, какой когда-либо код ошибки вы хотите, как, например:
location /images {
try_files $uri =403;
}
Это покажет запрещенную ошибку, если изображение не существует, или если вы используете 500 будет показывать ошибку сервера и т.д. ..
Что вы имели в виду в конце '/' в строке 'try_files'? –
Значение опции возврата - «/». Персонаж перед «;» в этой строке. – Jonah
Ну, он должен быть файлом, а не URI, поэтому используйте $ uri/или use /index.html –