Comment remplacer la valeur du paramètre de requête http

J’utilise nginx pour les demandes de proxy des clients au backend du fournisseur de données JSON. Comment puis-je remplacer l’un des parameters de la requête, s’il en existe un, mais ne satisfait pas à regexp ^\d{1,2}$ ?

Maintenant je suis à ce stade:

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

Cela fonctionne, quand l’argument de limit n’est pas défini, mais a lieu pour les arguments de double limit , si un argument est défini dans la requête.

Comportement requirejs:

 # no limit arg, add one with default value /path?key=1 → /path?limit=10&key=1 # arg value satisfies regexp, don't rewrite /path?key=1&limit=50 → /path?key=1&limit=50 # arg value doesn't satisfies regexp, replace with default /path?key=1&limit=5000 → /path?limit=10&key=1 

L’ordre des arguments n’a pas d’importance, bien sûr.

 nginx/1.0.10 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 

Essayez ce module: https://github.com/chaoslawful/lua-nginx-module

Vous pouvez modifier les arguments, les en-têtes et autres objects magiques

OpenResty, une meilleure façon d’utiliser ngx_lua_module: http://openresty.org/