2015-09-21 76 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; 
相關問題