web-dev-qa-db-ja.com

Nginxロードバランス/パスを使用したアップストリームへのプロキシ/書き換え

基本的に私はAPIファームを持っています

192.168.1.1、192.168.1.2、192.168.1.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;
    }
}

ただし、アップストリームサーバーにパスを設定することはできません。私はこれらを書き直さなければならないと思いますか?着信要求がそれを書き換えるためにそれを行う方法を知っていますが、それが各バックエンドサーバーに送られるときにそれをどのように書き換えることができるかわかりません異なる

よろしくお願いします!!

3
Matt The Ninja

これには回避策があります。アイデアは、アップストリームごとにproxyサーバーブロックを作成することです。

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;
    }
}
5
Alexey Ten