在 Apache APISIX 中,通过 proxy-rewrite
插件来修改上游配置时,需要确保插件的执行顺序和上下文环境正确。你提到在自己的插件中调用 proxy_rewrite.rewrite({host="new_upstream"}, ctx)
,但新上游没有生效,这可能是由于以下几个原因:
- 插件执行顺序:确保你的自定义插件在
proxy-rewrite
插件之后执行,proxy-rewrite.priority是1008。 - 上下文环境:确保在正确的阶段(如
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" } }
注意事项
- 插件优先级:确保你的插件优先级低于proxy_rewrite,你插件的priority要小于1008
- 插件依赖:确保
proxy_rewrite
插件已加载,并且可以被调用。 - 日志检查:通过 APISIX 日志检查插件是否正确执行,并输出相关调试信息。
通过以上方法,你应该能够在自定义插件中调用 proxy-rewrite
插件,并成功修改上游配置。如果问题仍然存在,请检查 APISIX 的错误日志以获取更多信息。