如何替换http请求参数值

时间:2011-11-24 15:50:02

标签: configuration nginx

我正在使用nginx将来自客户端的请求代理到J​​SON数据提供者后端。如何替换其中一个请求参数(如果存在)但不满足正则表达式^\d{1,2}$

现在我就在这一点上:

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

        proxy_pass  http://data_provider;
    }

如果未定义limit参数,则可以使用,但如果在请求中定义了一个limit个参数,则会发生这种情况。

必需的行为:

# 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

当然,参数顺序并不重要。

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

1 个答案:

答案 0 :(得分:1)

试试这个模块: https://github.com/chaoslawful/lua-nginx-module

你可以修改args,header和其他神奇的东西

OpenResty,一种使用ngx_lua模块的更好方法: http://openresty.org/