在 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 的錯誤日誌以獲取更多資訊。