我使用 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;
}