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

09.06.2017 в 04:46
7880
+36

Зачастую в конфигурации 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. Вот такой вот интересный трюк.

loader
09.06.2017 в 04:46
7880
+36
Комментарии
К этому посту больше нельзя оставлять новые комментарии
Логические задачи с собеседований