• apisix~14在自定义插件中调用proxy_rewrite


    在 Apache APISIX 中,通过 proxy-rewrite 插件来修改上游配置时,需要确保插件的执行顺序和上下文环境正确。你提到在自己的插件中调用 proxy_rewrite.rewrite({host="new_upstream"}, ctx),但新上游没有生效,这可能是由于以下几个原因:

    1. 插件执行顺序:确保你的自定义插件在 proxy-rewrite 插件之后执行,proxy-rewrite.priority是1008。
    2. 上下文环境:确保在正确的阶段(如 rewrite 阶段)进行上游修改。

    下面是一个示例,展示如何在自定义插件中调用 proxy-rewrite 插件并修改上游配置。

    自定义插件示例

    假设你的插件名为 my-plugin,我们需要在 rewrite 阶段调用 proxy-rewrite 插件来修改上游。

    local core = require("apisix.core")
    local proxy_rewrite = require("apisix.plugins.proxy-rewrite")
    
    local plugin_name = "my-plugin"
    
    local _M = {
        version = 0.1,
        priority = 1000, -- 设置插件的优先级,值超大,优先级越高,越先执行
        name = plugin_name,
    }
    
    -- 定义插件的 schema
    _M.schema = {
        type = "object",
        properties = {
            new_host = {type = "string"}
        },
        required = {"new_host"}
    }
    
    function _M.check_schema(conf)
        return core.schema.check(_M.schema, conf)
    end
    
    function _M.rewrite(conf, ctx)
        local rewrite_conf = {
            host = conf.new_host
        }
    
        -- 调用 proxy-rewrite 插件的 rewrite 方法
        proxy_rewrite.rewrite(rewrite_conf, ctx)
    
        core.log.info("Upstream host rewritten to: ", conf.new_host)
    end
    
    return _M
    

    使用示例

    在配置文件中启用并配置该插件:

    {
        "plugins": {
            "my-plugin": {
                "new_host": "new_upstream"
            }
        },
        "upstream": {
            "nodes": {
                "127.0.0.1:1980": 1
            },
            "type": "roundrobin"
        }
    }
    

    注意事项

    1. 插件优先级:确保你的插件优先级低于proxy_rewrite,你插件的priority要小于1008
    2. 插件依赖:确保 proxy_rewrite 插件已加载,并且可以被调用。
    3. 日志检查:通过 APISIX 日志检查插件是否正确执行,并输出相关调试信息。

    通过以上方法,你应该能够在自定义插件中调用 proxy-rewrite 插件,并成功修改上游配置。如果问题仍然存在,请检查 APISIX 的错误日志以获取更多信息。

  • 相关阅读:
    LeetCode - 76 最小覆盖子串
    听劝!不要啥都不懂就学PMP!这100个考试关键点,带你直击考试现场
    type=“module“ 你了解,但 type=“importmap“ 你知道吗
    Vue脚手架初始化&脚手架结构分析
    依赖的aar包跟项目jdk版本不一致问题
    TCP编程及基础知识
    [C++] std::ranges中的特征和自定义std::ranges::view变换
    L44.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- su和visudo
    kubernetes之ingress探索实践
    kubernetes集群安装Ingress-nginx
  • 原文地址:https://www.cnblogs.com/lori/p/18266568