AWS 대상 그룹이 비정상이라고 보고했지만 애플리케이션은 정상입니다.

AWS 대상 그룹이 비정상이라고 보고했지만 애플리케이션은 정상입니다.

http://localhost:8088에서 실행되는 EC2 인스턴스의 AWS에서 실행되는 IIS 웹 사이트가 있습니다. 모든 HTTPS 트래픽을 EC2 인스턴스가 실행 중인 대상 그룹으로 보내는 ELB 뒤에 있으므로 http://my-dns-name에 대한 모든 요청은 ELB에 의해 https://my-dns-name으로 다시 라우팅됩니다. , 그런 다음 대상 그룹으로 이동합니다. 200 OK 응답에 대한 엔드포인트를 확인하는 상태 확인이 대상 그룹에 정의되어 있고 /healthcheck엔드포인트는 인증되지 않은 요청(익명이라고도 함)을 허용하도록 구성되어 있습니다.

애플리케이션 자체는 정상적으로 실행되고 있습니다. 그러나 AWS는 상태 확인 엔드포인트로부터 응답 코드 302를 수신하므로 대상 그룹을 비정상으로 보고합니다. PowerShell 등을 통해 데스크톱에서 직접 엔드포인트를 쿼리하면 Invoke-WebRequest예상되는 응답을 얻습니다 200 OK. EC2 인스턴스에 원격으로 접속하여 동일한 쿼리를 실행하면 예상된 200 OK응답도 반환됩니다.

$> Invoke-WebRequest -Uri https://my-dns-name/healthcheck -Method GET
StatusCode        : 200
StatusDescription : OK
Content           : {}
RawContent        : HTTP/1.1 200 OK

그러나 로컬 주소를 사용하도록 변경하면 http://localhost:8088쿼리가 실패합니다.

$> Invoke-WebRequest -Uri http://localhost:8088/healthcheck -Method GET
Invoke-WebRequest : Unable to connect to the remote server
At line:1 char:1
+ Invoke-WebRequest -Uri http://localhost:8088/healthcheck -Method GET

대상 그룹이 302 리디렉션을 받는 이유가 무엇인지 알 수 있지만 직접 쿼리하면 200 OK를 얻습니다(로컬 주소를 사용하지 않는 한)?

답변1

죄송합니다. 이는 애플리케이션의 코딩 문제였습니다. RequireHttps애플리케이션 시작 코드 깊은 곳에 필터가 묻혀 있었는데 , 분명히 백그라운드에서 리디렉션을 시도하고 있었습니다. AWS는 HTTP를 사용하여 웹 사이트를 확인하여 302 리디렉션을 경험했지만 외부에서 확인할 때 리디렉션을 트리거하지 않는 HTTPS를 통해 이동했습니다.

답변2

여기서 확인해야 할 몇 가지 사항은 다음과 같습니다.

  1. Windows 방화벽이 실행 중이고 포트 8088을 차단하고 있습니까?
  2. IIS가 실제로 8088을 수신하고 있습니까?
  3. AWS TG가 8088에서 상태 확인을 수행하도록 설정되어 있습니까? https에서 200 OK 응답을 보면 포트 443에서 실행 중인 것 같습니다.

관련 정보