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" 도메인으로 재정의되는 경우가 많습니다.
샘플 구성
구성이 아래 두 가지 상황 중 하나와 일치하는 경우 설정에는 이 문서의 지침이 적용됩니다.
- HTTP 설정에서 백 엔드 주소에서 호스트 이름 선택 사용
- 특정 도메인 이름으로 재정의 는 브라우저 요청의 값과 다른 값으로 설정됩니다.
원인
App Service는 다중 테넌트 서비스이므로 요청의 호스트 헤더를 사용하여 요청을 올바른 엔드포인트로 라우팅합니다. App Services의 기본 도메인 이름인 *.azurewebsites.net(예: contoso.azurewebsites.net)은 애플리케이션 게이트웨이의 도메인 이름(예: contoso.com)과 다릅니다. 백 엔드 App Service에는 브라우저에서 볼 수 있듯이 도메인에 맞는 리디렉션 URL 또는 쿠키를 생성하는 데 필요한 컨텍스트가 없습니다.
해결 방법
프로덕션 권장 솔루션은 호스트 이름을 재정의하지 않도록 Application Gateway 및 App Service를 구성하는 것입니다. Application Gateway를 사용하여 App Service 구성에서 "사용자 지정 도메인(권장)"에 대한 지침을 따릅니다.
문서에 설명된 대로 의미를 평가한 후에 다른 해결 방법(예: 위치 헤더 다시 쓰기)을 적용하는 것이 좋습니다. 역방향 프록시와 백 엔드 웹 애플리케이션 간에 원래 HTTP 호스트 이름을 유지합니다. 이러한 의미에는 도메인에 바인딩된 쿠키와 위치 헤더 외부의 절대 URL이 오류 상태를 유지할 수 있는 가능성이 포함됩니다.
해결 방법: 위치 헤더 다시 쓰기
경고
이 구성에는 제한 사항이 있습니다. 클라이언트와 Application Gateway 간에 그리고 백 엔드의 애플리케이션과 App Service 간에 서로 다른 호스트 이름을 사용하는 경우의 의미를 검토하는 것이 좋습니다. 자세한 내용은 아키텍처 센터의 문서를 검토하세요. 역방향 프록시와 백 엔드 웹 애플리케이션 간에 원래 HTTP 호스트 이름 유지
위치 헤더의 호스트 이름을 애플리케이션 게이트웨이의 도메인 이름으로 설정합니다. 이렇게 하려면 응답의 위치 헤더에 azurewebsites.net 포함되어 있는지 평가하는 조건으로 다시 쓰기 규칙을 만듭니다. 또한 애플리케이션 게이트웨이의 호스트 이름을 갖도록 위치 헤더를 다시 작성하는 작업을 수행해야 합니다. 자세한 내용은 위치 헤더를 다시 작성하는 방법에 대한 지침을 참조하세요.
비고
HTTP 헤더 다시 쓰기 지원은 Application Gateway의 Standard_v2 및 WAF_v2 SKU 에만 사용할 수 있습니다. 헤더 다시 쓰기 및 v2 SKU에서 사용할 수 있는 기타 고급 기능을 위해 v2로 마이그레이션하는 것이 좋습니다.
다음 단계
이전 단계에서 문제가 해결되지 않으면 지원 티켓을 엽니다.