nginx マップ変数はアップストリーム ハッシュ キーとして使用できませんか?

nginx マップ変数はアップストリーム ハッシュ キーとして使用できませんか?

URI の一部をアップストリーム ハッシュ キーとして使用したい場合、設定は次のようになります。


map $uri $dir {
     ~^/(.*?)/ $1;
}

upstream backServer {
    server 172.10.27.223:80;
    server 172.10.27.161:80;
    hash $dir consistent;
}

server {
    listen 80;
    location / {
        proxy_pass http://backServer;
    }
}

しかし、これは効果がなく、リクエストはURIに関係なく最初のサーバーにのみ送信されます。また、次のようなハッシュも試します。ハッシュ$dirの一貫性、その設定は有効です。

nignx をどのように設定すればよいですか?

答え1

これは動作するので、設定にいくつかのエラーがある可能性があります:

map $uri $hashtest {
  "~^(.*)/" "$1";
}

upstream nodeServers {
   server 192.168.1.3:8888;
   server 192.168.1.3:8889;
   hash $hashtest consistent;
}

server {
    ...
    location /xyz/ {
        proxy_pass http://nodeServers/;
        ...
    }
    ...
}

関連情報