2014-12-09 2 views
0

사용자가 올바르게 로그인 한 경우 결과를 기반으로 변수 값을 설정하려고합니다.이 변수를 조건부 SSI에 사용합니다. 사용자를 승인하려면 auth_request module을 사용하고 있습니다. 이 권한은 모든 페이지에서 발생합니다. 내가 직면 한 문제는 401/403 오류의 경우 NGINX가 401을 클라이언트에 전달한다는 것입니다. 내가 원하는 것은 어쨌든 (권한 부여가 실패하더라도) 일부 페이지를 보여주고 조건부 SSL에 대한 변수를 하위 요청 상태로 설정하는 것입니다.하위 쿼리를 기반으로 변수 값을 설정하는 방법

location/{ 
    set $auth_status 100; #Default Value 
    error_page 401 403 $show_anyway; 
    error_page 500 = /auth_fallback; 
    auth_request /auth_public; 
    auth_request_set $auth_status $upstream_status; 
    auth_request_set $show_anyway $request_uri; 
    } 

    location = /auth_public 
    { 
    proxy_pass http://localhost:8081; 
    proxy_pass_request_body off; 
    #return 200; #Tried this, but sub request doesn't fire. 
    } 
+0

필자는'auth_request_set' 및'error_page' 지시자가 필요합니다. –

+0

@AlexeyTen, 일부 error_page를 표시하고 싶지 않습니다. 어쨌든 변수 세트를 사용하여 요청한 페이지를 표시하려고합니다. – RijulB

답변

0

error_page 401 403 =200 ... 도울 수있는 구성 파일. 나는 @process 내부 try_files에 대해 다음과 같은 설정을

ssi on; 

location/{ 
    set $auth_status 100; 
    auth_request /auth.php; 
    auth_request_set $auth_status $upstream_status; 
    error_page 401 403 =200 @process; 
} 

location @process { 
    try_files $uri =404; 
} 

location = /auth.php { 
    fastcgi_pass 127.0.0.1:9001; 
    fastcgi_index index.php; 
    include fastcgi_params; 
} 

주 테스트 - (인덱스 파일을 찾을 경우) index 지시에 의해 내부 리디렉션을 방지하기위한 $uri/가 떨어 뜨린. 내부 리디렉션이 location /으로 전달되면 마지막 오류 코드가 사용됩니다.

+0

고마워요 @terra, 이것을 시험해보고 알려 드리겠습니다! – RijulB

+0

다시 한번 @terra. 당신의 솔루션은 매력처럼 작동합니다. 내 실수는 401/403 오류를 200으로 변환하지 않는 것이 었습니다. – RijulB

관련 문제