首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置NGINX负载均衡器的异常

如何设置NGINX负载均衡器的异常
EN

Stack Overflow用户
提问于 2019-08-07 08:06:35
回答 1查看 193关注 0票数 1

是否可以在least_conn模式下配置NGINX负载平衡器以使某些路径异常?

我希望以这样的方式配置负载均衡器,即单个登录操作所需的所有请求都发送到同一个后端应用程序实例。

我有前端应用程序访问重复的后端应用程序通过nginx负载均衡器。所有应用程序都部署在Tomcat 8.5上,后端实例配置了Tomcat之间的会话复制。

我的问题是,当使用OAuth-2.0 authorization_code授予方法对用户进行身份验证时,前端应用程序获得授权代码,但是由于通过负载均衡器连接后端,它试图使用该代码从另一台机器获得令牌,从而生成InvalidGrantException。

使用ip_hash模式或它的变体并不能解决这个问题,因为当应用程序通过VPN访问时,它是不稳定的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-10 00:32:03

是的,你可以通过声明两个地点来实现你想要的结果,并对它们给予不同的对待。参见下面的示例,并检查this question,它解释了优先级是如何工作的。

代码语言:javascript
复制
http {
  upstream myapp1 {
    least_conn;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
  }

  server {
    listen 80;

    location / {
        proxy_pass http://myapp1;
    }

    location /my-special-path/ {
        proxy_pass http://srv1.example.com;
    }
  }
}

以上是一种解决方案,主要基于您的第一条语句,您希望基于特定路径进行路由。如果您的问题更复杂,例如这些路径是动态创建的,那么您可以共享一个示例,以便更容易地理解您的特定情况。

更新

基于评论。我真的建议去解决您的后端,以便同步。尽管如此,如果您真的想从您的nginx中找到确切的解决方案,我将执行以下操作:

  1. 上,每个响应都会添加一个特定的头,它的特定后端响应了这个请求。add_header X-Upstream $upstream_addr;
  2. 在此特定路径上,我将根据该标头的值为请求提供服务。proxy_pass http://$http_x_upstream;

所以配置应该如下所示:

代码语言:javascript
复制
http {
  ...

  server {
  ...
    location / {
        add_header  X-Upstream  $upstream_addr always;
        proxy_pass http://myapp1;
    }

    location /authorize/ {
        add_header  X-Upstream  $upstream_addr always;
        proxy_pass http://$http_x_upstream;
    }
  }
}

注意::安全性。如果您沿着这条路径走下去,请注意,您正在根据客户端可以操作的值路由请求。因此,请确保您至少正在验证此值。检查this answer是否使用nginx验证标头。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57389709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档