09.06.2017   598

Как сделать несколько условий в Nginx

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. Вот такой вот интересный трюк.

Комментарии

 Dram 2017-06-10 09:42:00
+1

Откройте для себя map https://habrahabr.ru/post/231277/

Ответить
  •  ivashkevich 2017-06-10 12:40:11
    0

    Интересный приём для нескольких условий, спасибо)

    Ответить
Чтобы написать комментарий нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности