안티패턴: 동일한 호스트 별칭 및 포트 번호를 사용하는 여러 가상 호스트 정의

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

Apigee Edge에서 라우터 는 모든 수신 API 트래픽을 처리합니다. 즉, Edge API 프록시에 대한 모든 HTTP 및 HTTPS 요청은 먼저 Edge 라우터에서 처리됩니다. 따라서 API 프록시 요청 은 라우터의 IP 주소와 열린 포트로 전달되어야 합니다.

가상 호스트 를 사용하면 단일 서버 또는 서버 그룹에서 여러 도메인 이름을 호스팅할 수 있습니다. Edge의 경우 서버는 Edge 라우터에 해당합니다. 라우터에서 가상 호스트를 정의하면 여러 도메인에 대한 요청을 처리할 수 있습니다.

Edge의 가상 호스트는 라우터 포트 및 호스트 별칭과 함께 프로토콜 (HTTP 또는 HTTPS)을 정의합니다. 호스트 별칭은 일반적으로 라우터의 IP 주소에 매핑되는 DNS 도메인 이름입니다.

예를 들어 다음 이미지는 가상 호스트 정의가 두 개 있는 라우터를 보여줍니다.

이 예시에는 가상 호스트 정의가 두 개 있습니다. 하나는 도메인 domainName1에서 HTTPS 요청을 처리하고 다른 하나는 domainName2에서 HTTP 요청을 처리합니다.

API 프록시로의 요청에서 라우터는 수신되는 요청의 호스트 헤더와 포트 번호를 모든 가상 호스트에서 정의한 호스트 별칭 목록과 비교하여 어느 가상 호스트로 요청을 처리할지 결정합니다.

가상 호스트의 샘플 구성은 다음과 같습니다.

샘플 vhost 구성

안티패턴

조직의 동일한 환경 또는 여러 환경에서 또는 여러 조직에서 동일한 호스트 별칭과 포트 번호로 여러 가상 호스트를 정의하면 API 요청을 라우팅할 때 혼동이 발생하고 예기치 않은 오류/동작이 발생할 수 있습니다.

동일한 호스트 별칭을 가진 여러 가상 호스트의 영향을 설명하기 위해 예를 들어 보겠습니다.

동일한 호스트 별칭으로 정의된 가상 호스트 sandbox and secure 가 두 개 있다고 가정해 보겠습니다. 환경의 api.company.abc.com입니다.

별칭이 동일한 vhost

위의 설정에서는 다음 섹션에 설명된 대로 두 가지 시나리오가 있을 수 있습니다.

시나리오 1 : API 프록시가 가상 호스트 샌드박스 중 하나에 대한 요청만 수락하도록 구성됨

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

이 시나리오에서 클라이언트 애플리케이션이 호스트 별칭 api.company.abc.com을 사용하여 특정 API 프록시를 호출하면 다음 메시지와 함께 404 오류가 간헐적으로 발생합니다.

Unable to identify proxy for host: secure 

이는 라우터가 sandboxsecure 가상 호스트 모두에 요청을 보내기 때문입니다. 요청이 sandbox 가상 호스트로 라우팅되면 클라이언트 애플리케이션 이 성공적인 응답을 받습니다. 그러나 요청이 secure 가상 호스트로 라우팅되면 API 프록시가 secure 가상 호스트에서 요청을 수락하도록 구성되지 않았으므로 클라이언트 애플리케이션에 404 오류가 발생합니다.

시나리오 2 : API 프록시가 가상 호스트 샌드박스와 보안 모두에 대한 요청을 수락하도록 구성됨

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

이 시나리오에서 클라이언트 애플리케이션이 호스트 별칭 api.company.abc.com을 사용하여 특정 API 프록시를 호출하면 프록시 로직에 따라 유효한 응답을 받습니다.

그러나 API 요청이 두 가상 호스트 모두로 라우팅되는 반면 실제 요청은 하나의 가상 호스트로만 전송되도록 설계되었으므로 분석에 잘못된 데이터가 저장됩니다.

이는 로깅 정보 및 가상 호스트를 기반으로 하는 기타 데이터에도 영향을 줄 수 있습니다.

영향

  1. API 요청이 API 프록시가 요청을 수락하도록 구성되지 않은 가상 호스트로 라우팅될 수 있으므로 404 오류가 발생합니다.
  2. 요청이 특정 가상 호스트에 대해서만 이루어졌지만 API 요청이 동일한 호스트 별칭을 가진 모든 가상 호스트로 라우팅되므로 분석 데이터가 잘못됩니다.

권장사항

  • 동일한 환경 또는 조직의 여러 환경에서 동일한 호스트 별칭과 포트 번호로 여러 가상 호스트를 정의하지 마세요.
  • 여러 가상 호스트를 정의해야 하는 경우 아래와 같이 각 가상 호스트에서 다른 호스트 별칭을 사용하세요.

    가상 호스트 2개

추가 자료