You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2022/10/19 07:29:25 UTC

[GitHub] [apisix] hmthoo commented on issue #8117: router can't support location @xxx ?

hmthoo commented on issue #8117:
URL: https://github.com/apache/apisix/issues/8117#issuecomment-1283556117

   > It looks like you want to add an Nginx location configuration, and what you're adding here is a route. APISIX core does not use Nginx location for request matching, please check APISIX's definition of the route here https://github.com/apache/apisix/blob/master/docs/en/latest/admin-api.md# route. If you want to add Nginx configuration, please refer to here: https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L170-L173.
   
   I didn't find the answer I was looking for in the documentation. 
   
   I want to disforward "/saas" to "@apps_stable" via a custom plugin.
   
   ## my code
   Forwarding to the location based on the cid in the cid list
   ```
   local core = require("apisix.core")
   local plugin_name = "cid-dispatch"
   local ngx_cache = ngx.shared.cid
   
   local schema = {
       type = "object",
       properties = {},
       additionalProperties = false,
   }
   
   local _M = {
       version = 1.0,
       priority = 3002,
       name = plugin_name,
       schema = schema,
   }
   
   function get_cookie(cname)
       local cookie_name = 'cookie_'..cname
       return ngx.var[cookie_name]
   end
   
   function get_upstream()
       local proxy = "@apps_stable"
       local cid_list = ngx_cache:get("cid_list")
   
       if  cid_cookie == nil then
           core.log.warn("can't get cid in cookie")
           return proxy
       end
   
       if cid_cookie then
           local patter_cid=','..cid_cookie..','
           local res = string.find(cid_list,patter_cid)
   
           if res == nil then
               return proxy
           end
   
           proxy = "@apps_canary"
           return proxy
       end
   
       return proxy
   end
   
   function _M.rewrite(conf, ctx)
       this_proxy = get_upstream()
       ngx.exec(this_proxy)
   end
   
   return _M
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org