Подтвердить что ты не робот

Как я могу сделать эту директиву try_files?

Я пытаюсь понять, как работает директива nginx try_files. nginx работает на моем сервере и обслуживает страницу по умолчанию, расположенную в /usr/share/nginx/html/index.html.

Однако у меня есть простая html-страница, расположенная в файловой системе в /var/www/test/index.html. Следующий файл конфигурации не заставляет этот файл обслуживаться. Я хотел бы понять, почему нет, и какое изменение мне нужно сделать, чтобы оно было подано.

Вот соответствующая часть defualt.conf:

server {
    listen       80;
    server_name  localhost;

    root  /var/www;
    try_files /test/index.html /;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
4b9b3361

Ответ 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, оно покажет ошибку сервера и т.д.