Application Gateway에서 App Service 문제 해결

Azure App Service Azure Application Gateway 백 엔드 대상으로 사용될 때 발생할 수 있는 문제를 진단하고 해결하는 방법을 알아봅니다.

개요

이 문서에서는 아키텍처 센터에서 자세히 설명한 대로 다음 문제를 해결하는 방법을 알아봅니다. 역방향 프록시와 백 엔드 웹 애플리케이션 간에 원래 HTTP 호스트 이름 유지

  • 잘못된 절대 URL
  • 잘못된 리디렉션 URL
    • 리디렉션이 있을 때 앱 서비스 URL이 브라우저에 노출됩니다.
    • 예를 들어 잘못된 호스트 이름이 있는 리디렉션으로 인해 OIDC 인증 흐름이 손상되었습니다. 여기에는 App Service 인증 및 권한 부여 사용이 포함됩니다.
  • 손상된 쿠키
    • 쿠키는 브라우저와 App Service 간에 전파되지 않습니다.
    • 예를 들어 앱 서비스 ARRAffinity 쿠키 도메인은 앱 서비스 호스트 이름으로 설정되며 원래 호스트 대신 "example.azurewebsites.net"에 연결됩니다. 결과적으로 세션 선호도가 손상됩니다.

위의 증상의 근본 원인은 브라우저에서 볼 수 있듯이 Application Gateway 사용하는 호스트 이름을 다른 호스트 이름으로 App Service 재정의하는 설정입니다. 호스트 이름이 기본 App Service "azurewebsites.net" 도메인으로 재정의되는 경우가 많습니다.

근본 원인 - Application Gateway 호스트 이름을 azurewebsites.net 덮어씁니다.

샘플 구성

구성이 아래 두 가지 상황 중 하나와 일치하는 경우 설정에는 이 문서의 지침이 적용됩니다.

  • HTTP 설정에서 백 엔드 주소에서 호스트 이름 선택 사용
  • 특정 도메인 이름으로 재정의 가 브라우저 요청과 다른 값으로 설정됩니다.

원인

App Service는 다중 테넌트 서비스로, 요청의 호스트 헤더를 사용하여 요청을 올바른 엔드포인트로 라우팅합니다. App Service의 기본 도메인 이름은 *.azurewebsites.net(예: contoso.azurewebsites.net)이며 이것은 애플리케이션 게이트웨이 도메인 이름과는 다릅니다(예: contoso.com). 백 엔드 App Service 브라우저에서 볼 수 있듯이 도메인과 일치하는 리디렉션 URL 또는 쿠키를 생성하는 데 필요한 컨텍스트가 없습니다.

해결 방법

프로덕션 권장 솔루션은 호스트 이름을 재정의하지 않도록 Application Gateway 구성하고 App Service. Application Gateway App Service 구성에서 "Custom Domain(권장)"에 대한 지침을 따릅니다.

문서에 설명된 대로 의미를 평가한 후 다른 해결 방법(예: 아래 설명된 위치 헤더 다시 작성)을 적용하는 것이 좋습니다. 역방향 프록시와 백 엔드 웹 애플리케이션 간에 원래 HTTP 호스트 이름을 유지합니다. 이러한 의미에는 도메인에 바인딩된 쿠키와 위치 헤더 외부의 절대 URL이 끊어진 상태로 유지될 가능성이 포함됩니다.

해결 방법: 위치 헤더 다시 쓰기

경고

이 구성에는 제한 사항이 있습니다. 클라이언트와 Application Gateway 간에, 애플리케이션과 백 엔드의 App Service 간에 서로 다른 호스트 이름을 사용하는 경우의 영향을 검토하는 것이 좋습니다. 자세한 내용은 아키텍처 센터의 문서를 검토하세요. 역방향 프록시와 백 엔드 웹 애플리케이션 간에 원래 HTTP 호스트 이름 유지

위치 헤더의 호스트 이름을 애플리케이션 게이트웨이 도메인 이름으로 설정합니다. 이 작업을 수행하려면 응답의 위치 헤더에 azurewebsites.net이 포함되었는지를 평가하는 조건으로 다시 쓰기 규칙을 만듭니다. 또한 애플리케이션 게이트웨이의 호스트 이름을 갖도록 위치 헤더를 다시 쓰는 작업을 수행해야 합니다. 자세한 내용은 위치 헤더 다시 쓰기 지침을 참조하세요.

참고

HTTP 헤더 다시 쓰기 지원은 Application Gateway의 Standard_v2 및 WAF_v2 SKU에서만 가능합니다. v2 SKU에서 사용할 수 있는 헤더 다시 쓰기 및 기타 고급 기능에 대해 v2로 마이그레이션하는 것이 좋습니다.

다음 단계

이전 단계로 문제가 해결되지 않으면 지원 티켓을 엽니다.