2016-07-26 2 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

당신의 "추악한"해결책은 실제로 간결하고 명확합니다. 그것은 이해하기 어렵고 수정하기 쉬운 regexp 마법을 포함하지 않습니다.

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

두 가지 더 좋은 해결책이 있습니다. 하나 :'위치^~/대시 보드 {...}', 두 번째'위치 ~^(/ 웹 사이트 |/로그인) {...}' –

+0

"못생긴"해결책이 여전히 최고라고 생각합니다. :) –