yuansheng, what do you think? Thanks, Ming Wen, Apache APISIX Twitter: _WenMing
Ming Wen <[email protected]> 于2019年12月23日周一 下午9:03写道: > hi, codjust, > I prefer your design than the existing one[1]. > > These categories "vars", "header", "cookie", "consumer" are friendly for > developer. > > [1] > https://github.com/apache/incubator-apisix/blob/master/lua/apisix/schema_def.lua#L261 > > Thanks, > Ming Wen, Apache APISIX > Twitter: _WenMing > > > codjust <[email protected]> 于2019年12月23日周一 下午8:58写道: > >> Now chash key only support fetch from nginx variable. We need to be more >> flexible approach, >> eg: cookie, custom header and so on. >> Here is an example to achieve: >> upstream json schema: >> hash_on = { >> type = "string", >> default = "vars", >> enum = { >> "vars", >> "header", >> "cookie", >> "consumer" >> }, >> }, >> key = { >> description = "the key of chash >> for dynamic load balancing", >> type = "string" >> }, >> >> >> eg: >> local function create_chash_hash_key(ctx, upstream) >> local key = upstream.key >> local hash_on = upstream.hash_on >> local chash_key >> -- from nginx variable >> if hash_on == "vars" then >> chash_key = ctx.var[key] >> elseif hash_on == "header" then >> chash_key = ngx.req.get_headers()[key] >> elseif hash_on == "cookie" then >> chash_key = ctx.var["cookie_" .. key] >> -- TODO chash_key doesn't exist, set-cookie >> end >> if not chash_key then >> chash_key = ctx.var["remote_addr"] >> end >> return chash_key >> end >> >> >> hash_on type desc: >> 1 vars: fetchs nginx variable >> 2 header: custom headers or standard http headers >> 3 cookie: fetch chash key from cookie. It can be used to sticky session >> 4 consumer: hash by consumer_id >> If the specified chash key is not present, use default key: >> remote_addr(it can also provide default settings). >> >> >> everybody have a better idea? >> >> github issue: >> https://github.com/apache/incubator-apisix/issues/992 > >
