0

我正在尝试设置一个负载均衡器,它将重定向到特定版本的应用程序某些用户。到目前为止,我使用的是蓝/绿部署策略(所以一旦我制作了新版本的应用程序,我就会创建新环境并在那里重定向流量)。现在我想改变这种方法。我希望能够指定在身份验证后会看到新站点的用户(更有经验或其他),而其他用户仍将被重定向到旧站点。如果新版本出现问题,所有用户都会看到旧版本。目前我的负载平衡是在 apache 中进行的,并且身份验证是在应用程序级别完成的。那么这甚至可能吗?我知道我可以在应用程序中对其进行硬编码,但是如果新功能中存在错误并且新用户仍然被重定向到那里怎么办?然后我需要停止所有用户的应用程序并回滚到旧版本,我猜这很糟糕。我正在考虑使用外部 CAS,但是如果可能的话,我没有找到任何信息。所以我想问一下是否有可能,是否有任何工具(可能是一些 apache 插件)用于此目的?

4

1 回答 1

1

这是一个有效的解决方案nginx

  1. 创造conf.d/balancer.conf
  2. 将代码放入其中(见下文)
  3. docker run -p8080:8080 -v ~/your_path/conf.d:/etc/nginx/conf.d openresty/openresty:alpine
  4. 用来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 回答