NGINX Internal Redirect 설정으로 인증 확인

이 포스트에서는 NGINX internal redirect 기능을 활용하여 특정 리소스에 대한 접근을 제한하는 방법에 대해 살펴보겠습니다.

internal redirect를 통해, 우리는 사용자 요청을 효과적으로 관리하고, 민감한 데이터나 페이지에 대한 불법적인 접근을 방지할 수 있습니다. 이 글을 통해 NGINX 설정을 최적화하고, 보안성을 강화하는 방법을 익혀보겠습니다.

(※ 이 포스트에서 사용하는 ngx_http_internal_redirect_module 모듈은 상용 버전인 NGINX Plus에서 사용 가능합니다.)

목차

1. NGINX Plus Internal Redirect 란?
2. NGINX Plus Internal Redirect 구성으로 인증 확인
3. NGINX Plus Internal Redirect로 사용자 확인
4. 결론

1. NGINX Plus Internal Redirect 란?

ngx_http_internal_redirect_module 모듈(1.23.4)은 내부 리디렉션을 허용합니다. URI를 다시 쓰는 것과 달리, 리디렉션은 요청 및 연결 처리 제한과 액세스 제한을 확인한 후에 이루어집니다.

Syntax:	        internal_redirect uri;
Default:	—
Context:	server, location

요청의 내부 리디렉션을 위한 URI를 설정합니다. URI 대신 명명된 위치를 사용할 수도 있습니다. uri 값은 변수를 포함할 수 있습니다. uri 값이 비어 있으면 리디렉션이 이루어지지 않습니다.

2. NGINX Plus Internal Redirect 구성으로 인증 확인

internal_redirect는 요청된 URI가 다른 내부 URI로 리다이렉트되도록 설정하는 NGINX Plus의 지시문입니다. 이 지시문은 클라이언트가 직접 접근할 수 없는 URI로 리다이렉트할 때 사용됩니다.

특히 인증이나 데이터 처리가 필요한 경우, 클라이언트의 요청을 내부적으로 자체적으로 처리하도록 함으로써 보다 안전한 접근 제어를 구현할 수 있습니다.

3. NGINX Plus Internal Redirect로 사용자 확인

아래는 internal redirect 를 사용하여 admin과 user를 구분하는 구성입니다.

server {
    listen 80;

    # 클라이언트가 접근하는 기본 경로
    location = /auth {
        # 요청을 /auth로 내부 리다이렉트
        internal_redirect /auth_p;
    }

    # 인증/권한 확인 처리
    location /auth_p {
        internal; # 외부에서 직접 접근 불가

        # admin에 대한 인증
        if ($http_authorization = "Bearer valid_admin_token") {
            set $user_authenticated "admin";

            proxy_pass http://test/$user_authenticated;
            break;
        }

        # user에 대한 인증
        if ($http_authorization = "Bearer valid_user_token") {
            set $user_authenticated "user";
            
            proxy_pass http://test/$user_authenticated;
            break;
        }

        # 인증 실패 시 에러 반환
        default_type text/html;
        return 403 "Access Denied";
    }
}

위와 같이 구성하면 사용자가 /auth 로 요청을 보냈을 때, 요청 헤더에 admin 헤더 또는 user 헤더가 있는지 확인합니다.

따라서, admin 용 헤더가 있으면 $user_authenticated 변수의 값이 admin으로 설정되고, /admin 경로로 프록시합니다. user 용 헤더가 있으면 $user_authenticated 값이 user로 설정되고, /user로 프록시하는 구성입니다.

아래는 각각 인증된 사용자에 따라 받는 응답의 결과 입니다. /admin 과 /user의 응답입니다.

이 예시에서는 Postman을 사용하여 헤더의 admin, user 인증을 넣고 진행합니다.

admin 헤더 요청:

nginx plus internal redirect

admin 헤더를 사용하여 요청을 보냈을 때, /admin 경로가 응답하는 것을 확인할 수 있습니다.

user 헤더 요청:

nginx plus internal redirect

user 헤더를 사용하여 요청을 보냈을 때, admin 경로가 응답하는 것을 확인할 수 있습니다.

헤더가 포함되어 있지 않을 때:

nginx plus internal redirect

헤더가 없으면 구성한 403 “Access Denied” 문구가 뜨는 것을 확인할 수 있습니다. 또한 인증을 처리하는 경로인 /auth_p 경로로 요청할 경우 해당 경로는 내부에서만 요청 가능하기에 404 응답을 반환하게 됩니다.

nginx plus internal redirect

위와 같이 internal redirect 지시문을 사용하여 외부에서 접근되지 않는 경로를 설계하고, 사용자 인증와 같은 다양한 기능을 구현할 수 있습니다.

4. 결론

NGINX Plus의 Internal Redirect 기능은 인증 과정의 효율성을 크게 향상시킬 수 있는 도구입니다. 이를 통해 사용자 인증을 중앙 집중화하고, 백엔드 서버의 부담을 줄이며, 클라이언트의 요청을 보다 원활하게 처리할 수 있습니다.

이번 포스트에서는 헤더를 통한 admin과 user 요청에 따라, 서비스를 라우팅하는 구성 방법에 대해 설명했습니다.

internal redirect 지시문을 통해 보안과 성능을 동시에 확보할 수 있습니다.

NGINX Plus를 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required