如何为Kong Gateway配置请求Header白名单以过滤上游请求?
Kong Gateway 请求Header白名单配置方案
当然有实现方案,不需要额外找第三方插件,用Kong自带的能力就能搞定,以下是几种常用方式:
方案一:利用request-transformer插件反向实现(适合简单场景)
如果你的白名单Header数量固定且不需要动态调整,可以通过先删除所有Header,再保留指定Header的方式实现:
- 为目标路由/服务启用
request-transformer插件 - 配置插件参数:
- 设置
remove.headers为*(删除所有请求Header) - 设置
append.headers为你需要保留的Header列表,比如X-User-Id,X-Request-Trace
- 设置
注意:这种方式会强制保留指定Header,如果请求中原本没有这些Header,插件会自动添加空值的Header到上游。如果需要只保留请求中实际存在的白名单Header,建议用下面的方案。
方案二:使用pre-function插件编写自定义Lua逻辑(灵活且轻量)
pre-function是Kong自带的插件,可以在请求转发到上游前执行自定义Lua代码,刚好适合做Header白名单过滤:
- 为目标路由/服务启用
pre-function插件 - 在
access阶段添加以下Lua代码(替换allowed_headers里的列表为你的白名单):
local allowed_headers = { ["x-user-id"] = true, ["x-request-trace"] = true, ["host"] = true -- 通常Host Header需要保留,可根据实际需求调整 } -- 遍历所有请求Header,删除不在白名单内的项 for header_name, _ in pairs(ngx.req.get_headers()) do local lower_header = string.lower(header_name) if not allowed_headers[lower_header] then ngx.req.clear_header(header_name) end end
这种方式会精准保留请求中实际存在的白名单Header,删除所有其他Header,完全符合你的需求。
方案三:自定义独立Lua插件(适合需要复用或复杂逻辑场景)
如果需要在多个路由/服务复用这个逻辑,或者要添加更复杂的规则(比如动态从配置中心拉取白名单),可以自定义一个简单的Lua插件:
- 按照Kong插件规范创建新插件,核心逻辑和方案二的Lua代码一致
- 把白名单做成插件配置参数,方便在Kong Manager或Admin API中调整
- 打包并安装插件到Kong集群
这种方式更易于维护和扩展,适合企业级场景。
内容的提问来源于stack exchange,提问作者tdmadeeasy
相关产品推荐
相关产品推荐

