代码之家  ›  专栏  ›  技术社区  ›  peter Schiza

基于认证用户设置负载平衡器

  •  0
  • peter Schiza  · 技术社区  · 6 年前

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Oleg Kuralenko    6 年前

    以下是一个可行的解决方案 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 玩弄它

    平衡器。形态:

    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
    

    生成示例的内容。通用域名格式

    解释

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