我'm trying to get CORS working with a whitelist of domains based on the customers that exist in our system. We have a whitelabelled product that let'是公司CNAME我们系统的自定义域名 . 我们需要能够通过在HaProxy的响应中添加一个 Access-Control-Allow-Origin: http://some.custom.domain
标头来允许来自任何这些自定义域的 Origin
.
我一直在阅读从haproxy加载列表/ Map 的不同方法,但我还没有确定最好的实现 . 我已经提出了大约3种可能的方法,但我想看看是否有其他人也有一些见解 . 我到目前为止的选择:
-
存储map可用的域名,我可以在添加 Headers 时查找 . 此 Map 文件如何填充是目前的问题 . 我想我可以在启动时通过LUA进行API调用来创建文件?或者它可能是NFS挂载的文件?每次将新域添加到我们的系统时,我们都必须重新加载,通过相同的api调用或直接添加到套接字上的maps api .
-
使用LUA通过haproxy在每个任务上向api发出实时请求,以验证在
Origin
上传入的域是否合法并添加头 . 如果我们可以为memcached找到LUA客户端库,可能会使用Memcached以获得最小的开销 . -
可能实现某种基于DNS的解决方案,我们运行自己的DNS服务器来解析这些自定义域并让HaProxy对其进行查找 . 我不知道这是否可能,我知道haproxy有DNS功能 . 奇怪的是,我们实际上并不想解析为IP,我们只想要一个“是”或“否”的答案 .
有没有其他人知道这个问题的明显解决方案?我正在寻找易于实现,但最终对请求本身的开销最小,因为这将需要在带有 Origin
标头的每个请求上发生 .
有任何见解赞赏!
1 回答
1/ Map solution:
我认为最简单和最有效的解决方案是将可用域存储在 Map 中 . 然后你可以通过HAProxy套接字使用set map,add map来更新 Map . 每当域名发生变化时,都不需要在这里重新加载 .
2/ LUA solution:
也可以使用LUA使用这样的函数来完成它:
有问题的前端有HAProxy conf:
此解决方案引入了更多开销,因为HAProxy必须依赖于每个CORS请求的外部资源(并可能等待它) .