2015-09-21 42 views

回答

2

我发现了article,这有一个小技巧来处理您的问题。

TLDR:

您可以通过使用地图模块如下重新映射与复杂的名称变量:

map $is_args $http_x_origin { 
    default $http_x-origin; 
} 

诀窍是,图不完全分析它的参数。语法是:map A X {default Y; },与:

  • 一个任何变量,最好是一个不会触发很多内部处理(因为nginx配置是声明性的,使用变量评估它)。我使用$ is_args,因为计算起来很便宜。
  • X是您要创建的新变量的名称,即地图目标。
  • Y是要访问的变量的名称。此时,它可以包含破折号,因为地图会自行解析。

我想这可能与$args_工作了。

+1

我用'数据foo'查询参数尝试过了,不能让它与合作映射'$ arg_data-foo'(使用openresty/1.11.2.4)。有任何想法吗? – dstj

0

使用openresty/1.11.2.4,接受的答案中提到的map方法对我无效。但由于openresty自带的预编译的Lua模块,我可以使用下面的代码来做到这一点:

set $dataArg ''; 
set_by_lua_block $dataArg { return ngx.req.get_uri_args()["data-arg"] } 
proxy_cache_key $scheme$proxy_host$uri$is_args$dataArg; 
相关问题