负载平衡与不同的 nginx 位置上下文和后端服务器上下文

负载平衡与不同的 nginx 位置上下文和后端服务器上下文

我使用 nginx 和上游模块进行负载平衡,配置如下

upstream lb {
  server 127.0.0.1:8080;
  server 127.0.0.1:8081;
 }
 server {
  listen 88;
  server_name localhost;

  location /cas/ {
    proxy_pass              http://lb;
    proxy_redirect          off;
    proxy_connect_timeout   2;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

问题是“location /context/”必须与后端服务器的上下文匹配,所以当我请求localhost/context/index.html时,nginx会将其路由到127.0.0.1:8080/context/index.html或127.0.0.1:8080/context/index.html。

后端上下文和 nginx 位置是否可以有所不同,例如使用“location /”,nginx 将把请求路由到 127.0.0.1:8080/context/index.html 或 127.0.0.1:8080/context/index.html

谢谢。

答案1

您可以有多个位置语句,每个位置语句都有自己的上游

location /cas/ {
  proxy_pass              http://lb; 
  }

location /web/ {
    proxy_pass              http://2b;    
  }

location /mail/ {
    proxy_pass              http://3b;    
  }

您还可以使用 if 语句检查 $request_uri 变量并使用它来决定将请求传递给哪个上游。

if ($request_uri ~* "^/(.+?)/context")
{
  proxy_pass   http://domain.com$request_uri;
  break;
}

相关内容