Skip to content

Commit

Permalink
fix(proxy-cache): allow nil ctx vars in cache key (#7168)
Browse files Browse the repository at this point in the history
Signed-off-by: spacewander <spacewanderlzx@gmail.com>
  • Loading branch information
worldwonderer authored and spacewander committed Jun 20, 2022
1 parent be890c3 commit 82c233e
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
2 changes: 1 addition & 1 deletion apisix/plugins/proxy-cache/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ function _M.generate_complex_value(data, ctx)
core.log.info("proxy-cache complex value index-", i, ": ", value)

if string.byte(value, 1, 1) == string.byte('$') then
tmp[i] = ctx.var[string.sub(value, 2)]
tmp[i] = ctx.var[string.sub(value, 2)] or ""
else
tmp[i] = value
end
Expand Down
2 changes: 1 addition & 1 deletion docs/zh/latest/plugins/proxy-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ title: proxy-cache
| no_cache | array[string] | 可选 | | | 是否缓存数据,可以使用变量,需要注意当此参数的值不为空或非'0'时将不会缓存数据 |
| cache_ttl | integer | 可选 | 300 秒 | | 当选项 cache_control 未开启或开启以后服务端没有返回缓存控制头时,提供的默认缓存时间 |

注:变量以$开头,也可以使用变量和字符串的结合,但是需要以数组的形式分开写,最终变量被解析后会和字符串拼接在一起。
注:变量以$开头,不存在时等价于空字符串。也可以使用变量和字符串的结合,但是需要以数组的形式分开写,最终变量被解析后会和字符串拼接在一起。

`conf/config.yaml` 文件中的配置示例:

Expand Down
50 changes: 50 additions & 0 deletions t/plugin/proxy-cache/disk.t
Original file line number Diff line number Diff line change
Expand Up @@ -707,3 +707,53 @@ GET /t
--- error_code: 400
--- response_body eval
qr/failed to check the configuration of plugin proxy-cache err/
=== TEST 28: nil vars for cache_key
--- config
location /t {
content_by_lua_block {
local t = require("lib.test_admin").test
local code, body = t('/apisix/admin/routes/1',
ngx.HTTP_PUT,
[[{
"plugins": {
"proxy-cache": {
"cache_key": ["$arg_foo", "$arg_bar", "$arg_baz"],
"cache_zone": "disk_cache_one",
"cache_bypass": ["$arg_bypass"],
"cache_method": ["GET"],
"cache_http_status": [200],
"hide_cache_headers": true,
"no_cache": ["$arg_no_cache"]
}
},
"upstream": {
"nodes": {
"127.0.0.1:1986": 1
},
"type": "roundrobin"
},
"uri": "/hello"
}]]
)
if code >= 300 then
ngx.status = code
end
ngx.say(body)
}
}
--- request
GET /t
--- response_body
passed
=== TEST 29: hit route with nil vars in cache_key
--- request
GET /hello?bar=a
--- response_body chop
hello world!

0 comments on commit 82c233e

Please sign in to comment.