Welcome! Log In Create A New Profile

Advanced

Замена значения параметра http-запроса, если он не удовлетворяет regexp

Posted by TwilightFeel 
Добрый день.

Использую nginx в качестве прокси для JSON провайдера данных. Как заменить значение http-параметра limit, если он не удовлетворяет regexp ^\d{1,2}$? Для случая, когда параметр отсутсвует решение уже нашел.

Сейчас конфигурация location внутри server выглядит так:

location / {
if ( $arg_limit !~ "^\d{1,2}$" ) {
rewrite ^(.*)$ $1?limit=10 break;
}

proxy_pass http://data_provider;
}

Это работает для случая, когда параметр отсутствует в исходном запросе, но когда параметр в запросе уже есть, но не удовлетворяет regexp'у, то в запросе к backend'у приходит два параметра, что понятно, так как исходный параметр limit никуда не делся. при замене важно сохранить остальные параметры, кроме заменяемого, так что добавить ? в конец rewrite правила не подойдет в качестве решения.

Требуемое поведение:

# нет параметра limit в запросе, значит добавляем его со значением по-умолчанию
/path?key=1 → /path?limit=10&key=1

# параметр есть и удовлетворяет regexp, ничего не делаем
/path?key=1&limit=50 → /path?key=1&limit=50

# параметр есть, но не удовлетворяет regexp — заменяем значение параметра на значение по-умолчанию
/path?key=1&limit=5000 → /path?limit=10&key=1

nginx:
nginx: nginx version: nginx/1.0.10
nginx: built by gcc 4.4.5 (Debian 4.4.5-8)
nginx: TLS SNI support enabled
nginx: configure arguments: --with-ipv6 --with-pcre --with-http_ssl_module --with-http_addition_module --with-http_xslt_module --with-http_geoip_module --with-http_gzip_static_module --with-http_secure_link_module
Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 217
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready