能否用Kong request-transformer将URI变量替换为请求头值?
问题解答
Kong官方的request-transformer插件原生不支持直接将URI模板中的占位符(比如{realm_name})替换为请求头携带的值,不过可以通过Kong的Pre-function插件(Serverless Functions)来实现这个动态替换需求,具体方案如下:
用Pre-function插件实现动态URI重写
创建一个Pre-function插件,通过Lua代码读取请求头值并重构目标URI:
apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata: name: rewrite-uri-from-header namespace: keycloak config: functions: - | -- 读取请求头X_realm_name的值 local realm_name = kong.request.get_header("X_realm_name") -- 如果头存在,重写服务请求路径 if realm_name then kong.service.request.set_path("/admin/realms/" .. realm_name .. "/users") end plugin: pre-function
把这个插件绑定到对应的路由或服务上即可。如果需要处理请求头不存在的情况,可以添加默认值逻辑:
local realm_name = kong.request.get_header("X_realm_name") or "default_realm" kong.service.request.set_path("/admin/realms/" .. realm_name .. "/users")
补充说明
- 若执意使用request-transformer插件,只能提前构造好完整的目标URI,无法实现从请求头动态取值替换占位符的效果,不符合你的需求。
- Pre-function插件支持自定义Lua逻辑,能灵活应对各种动态路由场景,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Sinan NourEddine
相关产品推荐
相关产品推荐

