apisix~14在自定義插件中調用proxy_rewrite
在 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 的錯誤日志以獲取更多信息。
浙公網安備 33010602011771號