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

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

在 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 的错误日志以获取更多信息。

相关文章
|
12月前
|
缓存 JavaScript 应用服务中间件
Spartacus 部署到 CCV2 上造成 Nginx 返回 504 Gateway Timeout 错误的一个原因
Spartacus 部署到 CCV2 上造成 Nginx 返回 504 Gateway Timeout 错误的一个原因
|
12月前
|
前端开发 JavaScript 应用服务中间件
Vite配置Proxy代理解决跨域问题
Vite配置Proxy代理解决跨域问题
1253 0
|
缓存 应用服务中间件 nginx
重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务
重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务
198 0
|
中间件
基于traefik v2 写一个控制http请求方法的middleware配置
基于Traefik v2编写一个控制HTTP请求方法的中间件
436 0
|
API
Vue-cli3配置代理转发devServer.proxy
Vue-cli3配置代理转发devServer.proxy
159 0
|
Java 应用服务中间件 PHP
Nginx重写功能(rewrite与location)(一)
Nginx重写功能(rewrite与location)(一)
272 0
|
应用服务中间件 PHP nginx
Nginx重写功能(rewrite与location)(二)
Nginx重写功能(rewrite与location)(二)
375 0
|
安全 应用服务中间件 nginx
【web】location匹配、rewrite重写、动静分离(nginx)
文章目录 前言 一、location匹配 1.1 匹配规则
158 0
|
JavaScript 前端开发 开发者
基于webpack的热重载live reload和热更新HMR(中)
在前端应用框架中不管是react还是vue,官方都提供了相应的脚手架方便开发者快速入手,当我们在开发时修改某个js或者css文件时,webpack会自动编译我们的文件,我们刷新浏览器就可以看到编译后的文件。为此我们会想,如果我们修改保存之后,文件被编译、浏览器自动刷新、或者浏览器局部刷新(不刷新整个浏览器),这样的话多好。当然,基于webpack打包工具的相关库已经实现了。下面对此部分流程做简单的分析
|
缓存 前端开发 JavaScript
基于webpack的热重载live reload和热更新HMR(下)
在前端应用框架中不管是react还是vue,官方都提供了相应的脚手架方便开发者快速入手,当我们在开发时修改某个js或者css文件时,webpack会自动编译我们的文件,我们刷新浏览器就可以看到编译后的文件。为此我们会想,如果我们修改保存之后,文件被编译、浏览器自动刷新、或者浏览器局部刷新(不刷新整个浏览器),这样的话多好。当然,基于webpack打包工具的相关库已经实现了。下面对此部分流程做简单的分析