nginx и условия if

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
bars
Сообщения: 1086
ОС: BSD/LINUX

nginx и условия if

Сообщение bars »

Добрый вечер.
Есть обработка потока в nginx.
if ($is_args != ) {return 404;}
Она работает нормально, но к ней нужно добавить два условия, проверку на ?page=1 и ?itok=
У переменной ?page=2 после равно (универсальная переменная от 0 до много)
Тоесть если присудствуют ?page=1 и ?itok= то условие должно не срабоать.
Как это лучьше сделать?
Спасибо за понимание.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: nginx и условия if

Сообщение BigBrother »

bars писал(а):
23.06.2014 19:22
Добрый вечер.
if ($is_args != ) {return 404;}

1) Как у тебя такая конструкция работает? У меня ошибка

Код: Выделить всё

nginx -t
nginx: [emerg] invalid condition "$is_args" in ...
nginx -v
nginx version: nginx/1.2.7

2) Может тебя спасет хак логический операторов для nginx?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21519
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: nginx и условия if

Сообщение Bizdelnick »

bars писал(а):
23.06.2014 19:22
нужно добавить два условия, проверку на ?page=1 и ?itok=
У переменной ?page=2 после равно (универсальная переменная от 0 до много)
Тоесть если присудствуют ?page=1 и ?itok= то условие должно не срабоать.

bars писал(а):
23.06.2014 19:22
Спасибо за понимание.

Да не за что...
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 1086
ОС: BSD/LINUX

Re: nginx и условия if

Сообщение bars »

BigBrother писал(а):
23.06.2014 21:08
bars писал(а):
23.06.2014 19:22
Добрый вечер.
if ($is_args != ) {return 404;}

1) Как у тебя такая конструкция работает? У меня ошибка

Код: Выделить всё

nginx -t
nginx: [emerg] invalid condition "$is_args" in ...
nginx -v
nginx version: nginx/1.2.7

2) Может тебя спасет хак логический операторов для nginx?

if ($is_args != "") {return 404;}
Вот так работает.
Но всеранво как нужно сделать не выходит.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21519
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: nginx и условия if

Сообщение Bizdelnick »

bars писал(а):
24.06.2014 09:29
как нужно сделать не выходит.

Так как нужно-то? Объясните по-человечески. Из Вашего описания не понятно ни что требуется, ни что именно не получается.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: nginx и условия if

Сообщение BigBrother »

если я правильно понял, то: если в в переданных аргументах присутствует page=n и itok с пустым значением, значит надо вернуть НЕ 404. Да?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21519
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: nginx и условия if

Сообщение Bizdelnick »

BigBrother писал(а):
24.06.2014 12:03
itok с пустым значением

Насколько я понимаю, itok с пустым значением ничем не должен отличаться от неопределённого itok. Так что требование крайне странное (хотя в принципе и реализуемое через регулярку).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: nginx и условия if

Сообщение BigBrother »

Код: Выделить всё

location / {
    set $flag "";
    if ($is_args != "") {
        set $flag 1;
    }
    if ($arg_page ~ "[0-9]") {
        set $flag 1$flag;
    }
    if ($arg_itok = "") {
        set $flag 1$flag;
    }
    if ($flag = "111") {
        return bla-bla-bla;
    }
    return 404;
}

Проверил, вроде работает. Только регулярка для аргемента page не много кривая.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21519
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: nginx и условия if

Сообщение Bizdelnick »

Первая проверка вообще смысла не имеет в таком случае. И при отсутствии аргументов вроде же не надо 404 выдавать.

Код: Выделить всё

location / {
    set $flag "";
    if ($arg_page ~ "\d+") {
        set $flag 1$flag;
    }
    if ($arg_itok = "") {
        set $flag 1$flag;
    }
    if ($flag = "11") {
        return bla-bla-bla; # или rewrite
    }
    if ($is_args) {
        return 404;
    }
    # ...
}
(не проверял)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: