Вячеслав Пуханов

Чтение query-параметров с дефисами в NGINX конфиге

Для query-параметров в NGINX конфиге автоматически генерируются переменные вида $arg_<имя>, которые можно использовать в настройках. Например, чтобы обойти кеш когда в URL есть query-параметр nocache, можно написать такое:

proxy_cache_bypass $arg_nocache;
proxy_no_cache $arg_nocache;

Но если в имени параметра есть дефисы, автоматическая переменная для него создана не будет, так как дефис это невалидный символ для идентификаторов в nginx.conf

В таком случае переменную можно создать вручную с помощью блока map:

map $args $param_qa_nocache {
    "~(^|&)qa-nocache=(?<val>[^&]+)"  $val;
}

Этот блок получает на вход сырую query-строку $args и с помощью регулярки достает из нее значение параметра qa-nocache с дефисом, которое потом записывается в переменную $param_qa_nocache. Если параметр не будет задан в URL, в переменную запишется значение по умолчанию: пустая строка.

Эту переменную с валидным именем теперь можно использовать в любом месте конфига:

proxy_cache_bypass $param_qa_nocache;
proxy_no_cache $param_qa_nocache;
Опубликовано