根据经过身份验证的用户设置负载均衡器
Setting up load-balancer based on authenticated users
我正在尝试设置一个负载均衡器,它将重定向到特定用户的应用程序的特定版本。到目前为止,我使用的是 Blue/Green 部署策略(所以一旦我制作了新版本的应用程序,我就创建了新环境并在那里重定向了流量)。现在我想改变这种方法。我希望能够指定在身份验证后将看到新站点的用户(更有经验的或其他),而其他用户仍将被重定向到旧站点。如果新版本出现问题,所有用户都会看到旧版本。目前我的负载平衡是在 apache 中进行的,身份验证是在应用程序级别完成的。那么这有可能吗?我知道我可以在应用程序中对其进行硬编码,但是如果新功能中存在错误并且新用户仍被重定向到那里怎么办?然后我需要停止所有用户的应用程序并回滚到旧版本,我想这很糟糕。我正在考虑使用外部 CAS,但是当时没有找到任何可能的信息。所以我想问一下是否有可能,是否有任何工具(也许是一些 apache 插件)用于此目的?
这是 nginx
的有效解决方案
- 创建
conf.d/balancer.conf
- 将代码放入其中(见下文)
docker run -p8080:8080 -v ~/your_path/conf.d:/etc/nginx/conf.d openresty/openresty:alpine
- 用
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 等
我正在尝试设置一个负载均衡器,它将重定向到特定用户的应用程序的特定版本。到目前为止,我使用的是 Blue/Green 部署策略(所以一旦我制作了新版本的应用程序,我就创建了新环境并在那里重定向了流量)。现在我想改变这种方法。我希望能够指定在身份验证后将看到新站点的用户(更有经验的或其他),而其他用户仍将被重定向到旧站点。如果新版本出现问题,所有用户都会看到旧版本。目前我的负载平衡是在 apache 中进行的,身份验证是在应用程序级别完成的。那么这有可能吗?我知道我可以在应用程序中对其进行硬编码,但是如果新功能中存在错误并且新用户仍被重定向到那里怎么办?然后我需要停止所有用户的应用程序并回滚到旧版本,我想这很糟糕。我正在考虑使用外部 CAS,但是当时没有找到任何可能的信息。所以我想问一下是否有可能,是否有任何工具(也许是一些 apache 插件)用于此目的?
这是 nginx
的有效解决方案
- 创建
conf.d/balancer.conf
- 将代码放入其中(见下文)
docker run -p8080:8080 -v ~/your_path/conf.d:/etc/nginx/conf.d openresty/openresty:alpine
- 用
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 等