我正在尝试设置一个负载均衡器,它将重定向到特定版本的应用程序某些用户。到目前为止,我使用的是蓝/绿部署策略(所以一旦我制作了新版本的应用程序,我就会创建新环境并在那里重定向流量)。现在我想改变这种方法。我希望能够指定在身份验证后会看到新站点的用户(更有经验或其他),而其他用户仍将被重定向到旧站点。如果新版本出现问题,所有用户都会看到旧版本。目前我的负载平衡是在 apache 中进行的,并且身份验证是在应用程序级别完成的。那么这甚至可能吗?我知道我可以在应用程序中对其进行硬编码,但是如果新功能中存在错误并且新用户仍然被重定向到那里怎么办?然后我需要停止所有用户的应用程序并回滚到旧版本,我猜这很糟糕。我正在考虑使用外部 CAS,但是如果可能的话,我没有找到任何信息。所以我想问一下是否有可能,是否有任何工具(可能是一些 apache 插件)用于此目的?
问问题
88 次
1 回答
1
这是一个有效的解决方案nginx
- 创造
conf.d/balancer.conf
- 将代码放入其中(见下文)
docker run -p8080:8080 -v ~/your_path/conf.d:/etc/nginx/conf.d openresty/openresty:alpine
- 用来
curl
玩它
平衡器.conf:
map $cookie_is_special_user $upstream {
default http://example.com;
~^1$ http://scooterlabs.com/echo;
}
server {
listen 8080;
resolver 8.8.8.8;
location / {
proxy_pass $upstream;
}
}
测试
curl --cookie "is_special_user=1" http://localhost:8080
它将返回 scooterlabs.com 的内容,转储它收到的请求
curl http://localhost:8080
生成 example.com 的内容
解释
- 这个想法是,在您像往常一样获得授权后,您为后端应用程序视为特殊的用户设置一个特殊的 cookie
- 当然,只有当两个应用程序版本都在同一个域上提供时才有效,以便两个版本都能看到 cookie
- 之后,您根据 cookie 值将它们平衡到所需的服务器
- 您可以通过调整 nginx 配置文件轻松禁用此类路由
- 使用这种方法,您可以提出更复杂的场景,例如在 1-10 范围内设置随机 cookie 值,然后逐渐切换配置文件中的一些特殊用户,即从值为 1 的用户开始,然后是 1-2 等
于 2018-01-25T18:38:33.457 回答