다른 백엔드로 프록시하기 전에 한 백엔드의 응답을 확인하세요.

다른 백엔드로 프록시하기 전에 한 백엔드의 응답을 확인하세요.

Nginx 프런트엔드 뒤의 두 위치에 두 개의 백엔드가 있습니다. 백엔드 A는 OAuth로 인증을 구현합니다. 백엔드 B는 그렇지 않습니다.

위치 B에 대한 인증을 추가하는 게으른 방법은 각 요청을 백엔드 A에 먼저 보내는 것입니다. 제가 생각하는 흐름은 다음과 같습니다.

request for /b/kitten.png --> [ nginx ]
                              [ nginx ] --> request for /index.html --> [backend A]
                            if A responds 200:
                              [ nginx ] --> request for /kitten.png --> [backend B]
                            otherwise return what A returned (redirect to OAuth)

Nginx에서 이것이 가능합니까? 그렇지 않다면 OpenResty/HAProxy/Trafik에 있을까요?

답변1

완전한 답변은 아니지만 코멘트가 너무 깁니다.

설명하는 설정은 개념상 상당히 일반적인 전략과 유사합니다.

  • 인증을 하나의 시스템으로 오프로드
  • 역방향 프록시를 사용하여 인증된 클라이언트만 다른 애플리케이션/백엔드에 액세스할 수 있도록 합니다(요청 검사를 통해).
  • 인증되지 않은 클라이언트는 역방향 프록시에 의해 거부됩니다. (및/또는 이상적으로는 인증 공급자의 로그인 페이지로 리디렉션되며, 일단 성공적으로 인증되면 앱으로 다시 리디렉션됩니다.)
  • 인증된 클라이언트에는 액세스 권한이 부여됩니다.

이를 위해서는 클라이언트가 역방향 프록시에 제출하는 헤더/쿠키/세션 토큰의 유효성을 검사하는 방법이 필요합니다. 물론 장점은 역방향 프록시에 의해 노출된 애플리케이션이 자체 로그인/인증 방법을 제공할 필요가 없다는 것입니다.

nginx의 경우 약간의 lua 코드가 이러한 메서드를 만드는 일반적인 방법인 것 같습니다.

예를 들어 access_by_lua메소드는 인증 공급자로서 nginx 및 keycloak과의 통합을 만드는 데 일반적으로 사용됩니다. 예제를 참조하세요:여기그리고여기

관련 정보