Добрый вечер.
Есть обработка потока в nginx.
if ($is_args != ) {return 404;}
Она работает нормально, но к ней нужно добавить два условия, проверку на ?page=1 и ?itok=
У переменной ?page=2 после равно (универсальная переменная от 0 до много)
Тоесть если присудствуют ?page=1 и ?itok= то условие должно не срабоать.
Как это лучьше сделать?
Спасибо за понимание.
nginx и условия if
Модераторы: SLEDopit, Модераторы разделов
-
bars
- Сообщения: 1086
- ОС: BSD/LINUX
nginx и условия if
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
-
BigBrother
- Сообщения: 436
- Статус: ¯\_(ツ)_/¯
- ОС: linux based
Re: nginx и условия if
1) Как у тебя такая конструкция работает? У меня ошибка
Код: Выделить всё
nginx -t
nginx: [emerg] invalid condition "$is_args" in ...
nginx -v
nginx version: nginx/1.2.72) Может тебя спасет хак логический операторов для nginx?
-
Bizdelnick
- Модератор
- Сообщения: 21519
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: nginx и условия if
Да не за что...
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
bars
- Сообщения: 1086
- ОС: BSD/LINUX
Re: nginx и условия if
BigBrother писал(а): ↑23.06.2014 21:08
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
Так как нужно-то? Объясните по-человечески. Из Вашего описания не понятно ни что требуется, ни что именно не получается.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
BigBrother
- Сообщения: 436
- Статус: ¯\_(ツ)_/¯
- ОС: linux based
Re: nginx и условия if
если я правильно понял, то: если в в переданных аргументах присутствует page=n и itok с пустым значением, значит надо вернуть НЕ 404. Да?
-
Bizdelnick
- Модератор
- Сообщения: 21519
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: nginx и условия if
Насколько я понимаю, itok с пустым значением ничем не должен отличаться от неопределённого itok. Так что требование крайне странное (хотя в принципе и реализуемое через регулярку).
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
BigBrother
- Сообщения: 436
- Статус: ¯\_(ツ)_/¯
- ОС: linux based
Re: nginx и условия if
Код: Выделить всё
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
Первая проверка вообще смысла не имеет в таком случае. И при отсутствии аргументов вроде же не надо 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;
}
# ...
}Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |