根据经过身份验证的用户设置负载均衡器

Setting up load-balancer based on authenticated users

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

这是 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来玩

balancer.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

它将return scooterlabs.com 的内容转储它收到的请求

curl http://localhost:8080

产生example.com

的内容

说明

  • 这个想法是,在后端应用程序像往常一样获得授权后,您为您视为 特殊 的用户设置一个特殊的 cookie
  • 当然,只有当两个应用程序版本都在同一个域上提供时,它才会起作用,以便两个版本都能看到 cookie
  • 之后根据 cookie 值将它们平衡到所需的服务器
  • 您可以通过调整 nginx 配置文件轻松禁用此类路由
  • 使用这种方法,您可以想出更复杂的场景,例如在 1-10 范围内设置随机 cookie 值,然后逐渐切换配置中的一些 特殊 用户文件,即从值为 1 的文件开始,然后是 1-2 等