2016-07-26 53 views
0

我在Nginx上有以下配置。Nginx與多個位置衝突

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

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

衝突時,要求做是爲了/dashboard/login,它是在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的第一檢查位置處使用該前綴字符串定義。 < ...>然後按照它們在配置文件中出現的順序檢查正則表達式。正則表達式的搜索在第一次匹配時終止,並使用相應的配置。

但是,這裏只有兩個位置塊的解決方案。

# Location order is important! 

location ~ /dashboard { 
    #proxy to server B 
} 

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

有兩種更好的解決方案。其中一個:'location ^〜/ dashboard {...}',第二個'location〜^(/ website |/login){...}' –

+0

我認爲「醜陋」解決方案仍然是最好的。 :) –