Nginx 负载平衡/代理到上游的路径/重写

Mat*_*nja 3 nginx proxy reverse-proxy load-balancing linux-networking

基本上我有一个 API 农场

192.168.1.1、192.168.1.2、192.168.1.3

但是,端点具有不同的文件夹结构(我无法修改的第 3 方!)

所以基本上我想要一个像这样的 nginx 配置

upsteam api_servers{
    server 192.168.1.1/api/;
    server 192.168.1.2/myApp/api/;
    server 192.168.1.3/;
}
server{
    listen 80;
    location / {
        proxy_pass http://api_servers;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,您不能在上游服务器中拥有路径。我想我必须重写这些?我知道如何为传入的请求重写它,但不确定当它到达每个后端服务器时如何以不同的方式重写它。

提前谢谢了!!

Ale*_*Ten 6

有一个解决方法。想法是为每个上游制作一个代理服务器块。

upsteam api_servers {
    server 127.0.1.1;
    server 127.0.1.2;
    server 192.168.1.3;
}

server {
    listen 127.0.1.1;
    location / {
        proxy_pass http://192.168.1.1/api/;
    }
}

server {
    listen 127.0.1.2;
    location / {
        proxy_pass http://192.168.1.2/myApp/api/;
    }
}

server {
    listen 80;
    location / {
        proxy_pass http://api_servers;
    }
}
Run Code Online (Sandbox Code Playgroud)