Чат PHP-разработчиков
Логические задачи с собеседований
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. Вот такой вот интересный трюк.

Присоединяйтесь к нам в ВКонтакте и в Facebook, чтобы не пропустить новые уроки. А также вступайте в наш чат PHP-разработчиков в Telegram.
Об авторе
Generic placeholder image
Артём Ивашкевич
Занимаюсь программированием более трех лет, работаю над проектами с миллионной посещаемостью. В свободное время обучаю программированию на PHP других людей, потому что мне это нравится. Если вы интересуетесь темой IT и хотели бы стать разработчиком, рекомендую прочитать статью о том, как я стал программистом.
Читайте также
Комментарии


Dram
Dram

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

ivashkevich
ivashkevich

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