Рейтинг:0

Конфигурация локаций Nginx

флаг br
Vv.

у меня есть конфиг

расположение ~ \.(pdf)$ {
    истекает через 2 часа;
}

место расположения / {
    ... внутренние правила...
}

Теперь я хочу, чтобы первый блок выполнялся только для реально существующих pdf, иначе запрос был бы передан на бэкэнд. Я полагаю, я должен добавить в первый блок местоположения try_files $uri @backend:

расположение ~ \.(pdf)$ {
    try_files $uri @backend;
    истекает через 2 часа;
}

место расположения / {
    ... внутренние правила...
}

местоположение @backend {
    ...те же внутренние правила...
}

Но оказывается, что оба места / и @бэкэнд будут абсолютно идентичными, можно ли их как-то объединить или надо просто сделать два одинаковых блока?

флаг br
Поместите внутренние правила в отдельный файл и используйте `include`.
флаг br
Vv.
Отдельный файл - это идея, но я не хочу добавлять сложности с дополнительным файлом. Есть ли более элегантный способ?
Рейтинг:0
флаг gr

В качестве обходного пути вы можете сократить место расположения к

место расположения / {
    try_files "" @backend;
}

Это создаст дополнительную систему статистика вызывать для каждого запроса, но так как это ваш корневой веб-каталог, который будет статистика'ed, эти вызовы должны кэшироваться ядром, и это не должно серьезно влиять на производительность.

PS

Вам не нужна группа захвата для вашего местоположения регулярного выражения, просто расположение ~ \.pdf$ { ... } будет достаточно (но немного более производительно).

Обновлять

Еще одно предложение, которое позволило бы сократить количество локаций:

карта $uri $try {
    ~\.pdf$ $uri;
    <some_other_mask_to_try_locally_first> $uri;
    # значением по умолчанию будет пустая строка
}
сервер {
    ...
    место расположения / {
        try_files $try @backend;
    }
    местоположение @backend {
        ...
    }
}
флаг br
Vv.
Спасибо за идеи здесь и на SO. На скобках - разумеется, при упрощении конфига к вопросу забыл их убрать)
Ivan Shatsky avatar
флаг gr
Проверьте обновление ответа.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.