Как сделать несколько условий в Nginx
Зачастую в конфигурации nginx требуется проверить несколько условий. Однако запись вида if (условие1 && условие2) не поддерживается этим софтом. В этой статье я расскажу о небольшом трюке, который всё же позволяет сделать проверку нескольких условий.
Однако, прежде чем начать, я всё же рекомендовал бы вам попробовать вынести логику таких проверок на уровень приложения, так как программирование на конфигах nginx - это довольно опасная вещь. Можно часами недоумевать на тему того, почему всё работает именно так. Конфиг не поддаётся отладке, в отличие от приложения, а ещё на нормальном языке программирования можно писать нормальные, понятные и однозначные условия, чего не скажешь о конфигурационных файлах в nginx.
И всё же, если нужно сделать такую проверку в nginx, то вот вам пример:
if ($conditionA = /panel) {
set $conditions "A";
}
if ($conditionB ~* "admin") {
set $conditions "${conditions}B";
}
if ($conditions = "AB") {
proxy_pass http://localhost/prerender;
break;
}
Как вы поняли, мы просто создаём новую переменную $conditions. Её мы при выполнении каждого из условий будем изменять. Если выполнилось первое - помещаем в неё букву A. Если выполнилось второе - добавляем в конец букву B. Остаётся только сравнить получившееся значение с результатом, который должен получиться при прохождении всех условий. В нашем случае - AB. Вот такой вот интересный трюк.
Комментарии