2016-07-26 27 views
0

Nginxには以下の設定があります。要求が/dashboard/loginに行われたときにNginxが複数の場所と競合しています

location ~ (/website|/login) { 
    #proxy to server A 
    ... 
} 

location /dashboard { 
    #proxy to server B 
    .... 
} 

競合が発生し、私が望むことserver A代わりのserver Bに入っています。

完璧に動作醜いソリューション:

location /website { 
    #proxy to server A 
    ... 
} 

location /login { 
    #proxy to server A 
    ... 
} 

location /dashboard { 
    #proxy to server B 
    .... 
} 

がどのように私は/ダッシュボード、この設定を変更することができます/ログインは#Bの定義と一致しますか? 私は醜い解決法で使用した反復コードを避けたい。

+2

あなたは醜さについて間違っています。解決策は簡単で効率的ですが、元の設定は醜いですがエラーが発生しやすい –

+1

自己繰り返しを避けるには 'include'命令を使用してください –

答えて

0

あなたの「醜い」解決策は、実際は簡潔かつ明確です。それは理解しにくいかもしれない正規表現の魔法を伴わない。

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

< ...> nginxの最初にチェックする場所は、プレフィックス文字列を使用して定義されました。 < ...>次に、正規表現が設定ファイルに現れる順にチェックされます。正規表現の検索は最初の一致で終了し、対応する設定が使用されます。

しかし、ここでは2つのロケーションブロックしかないソリューションです。

# Location order is important! 

location ~ /dashboard { 
    #proxy to server B 
} 

location ~ (/website|/login) { 
    #proxy to server A 
} 
+0

もっと良い解決策が2つあります。 1つ目は 'location ^〜/ dashboard {...}'、2番目の 'location〜^(/ website |/login){...}' –

+0

私はまだ "醜い"解決策を考えています。 :) –

関連する問題