Чтение 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;
Опубликовано