apisix~14在自定義外掛中呼叫proxy_rewrite

张占岭發表於2024-06-25

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

相關文章