[njs] как узнать имена всех аргументов переданных в запросе?

Gena Makhomed gmm на csdoc.com
Вт Июн 18 04:15:25 UTC 2019


Здравствуйте, All!

Есть объект r.args, но он не работает согласно документации:

function redirect(r) {
  // ...
  r.warn(Object.values(r.args).join(','))
  // ...

- в лог пишется пустая строка. Хотя судя по документации,
Object.values(r.args) должен был бы возвращать массив:
https://nginx.org/en/docs/njs/reference.html#core_object

P.S.

Для организации редиректов на канонический урл (для защиты от DoS/DDoS
путем обхода/отравления кеша с помощью рандомных аргументов запроса)
необходимо узнать какие именно аргументы были переданы в запросе.
Каким образом это можно сделать с помощью njs ?
Только вручную в njs парсить переменную $args ?

Применяется это примерно таким образом:

js_include conf.d/example.com.js;
js_set $stopMobileRedirect stopMobileRedirect;
js_set $x_subdomain x_subdomain;
js_set $redirect redirect;

server {
     # ...
     location / {
             if ($redirect) {
                 add_header Set-Cookie $stopMobileRedirect;
                 return 302 $redirect;
             }
             # ...
     }
}

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru