如何在 envoy 前置代理中仅重定向一个域名而非所有 on 401
现状: 我们使用 envoyproxy 过滤超时(因此未授权)的流量并重定向到所有.*\\.domain\\.de(:3000)?
上的 login.domain.tld,因此在 envoy.yaml
中,
inline_code: |
function envoy_on_response(response_handle)
if response_handle:headers():get(":status") == "401" then
response_handle:headers():replace(":status", "301")
response_handle:headers():replace("location", "https://login.domain.tld")
end
end
示例代码: https://github.com/envoyproxy/envoy/blob/main/examples/lua/envoy.yaml#L30-L39,YAML-path: static_resources.listeners:.address.filter_chains.filters.'envoy.http_connection_manager'.config.http_filters.'envoy.lua'config.inline_code
问题: 现在,我们想将重定向从所有子域名改为一个。 做这件事只需要将上面的代码加入一个条件,我们就可以做到。
为什么要这么做? 我们有很多子域,例如 api-{000..999}.domain.tld,它们都是 REST API,如果缺少验证就不应重定向。
尝试的解决方案: 我们假设在阅读文档时,https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter#requestedservername 可以解决此问题,因此添加了第二个条件:
inline_code: |
function envoy_on_request(request_handle)
local SNI = request_handle:streamInfo():requestedServerName()
end
function envoy_on_response(response_handle)
local SNI_str = tostring(SNI)
local MATCH_str = "app.domain.tld"
if response_handle:headers():get(":status") == "401" and string.find(SNI_str,MATCH_str) then
response_handle:headers():replace(":status", "301")
response_handle:headers():replace("location", "https://login.domain.tld")
end
end
遗憾的是,上面的代码不起作用,对象 request_handle:streamInfo():requestedServerName()
似乎为空或不存在。
问题:
- 我们可以使用哪个对象获取请求的 SNI 并将其转换为字符串类型?
- 如果没有这个选项,我们如何区分重定向的域名?更多过滤?
版本: Docker 镜像 envoyproxy/envoy:v1.16.2
原文链接 https://stackoverflow.com/questions/68995459
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?