HTTP 요청을 HTTPS로 리디렉션

이 예시에서는 URL 맵 리디렉션을 사용하여 모든 요청을 HTTP에서 HTTPS로 리디렉션하는 방법을 보여줍니다. 이 예시에서는 잘 알려진 포트인 80(HTTP) 및 443(HTTPS)을 사용하여 리디렉션을 설정하는 방법을 보여줍니다. 하지만 이러한 특정 포트 번호를 사용할 필요는 없습니다. 애플리케이션 부하 분산기의 각 전달 규칙은 1~65535 범위의 단일 포트를 참조할 수 있습니다.

HTTPS는 TLS(SSL)를 사용하여 HTTP 요청과 응답을 암호화하므로 더 안전하고 보안성이 높습니다. HTTPS를 사용하는 웹사이트의 URL은 시작 부분에 http:// 대신 https://를 사용합니다.

기존 부하 분산기

포트 443으로 HTTPS 트래픽을 제공하는 HTTPS 애플리케이션 부하 분산기(여기서는 LB1이라고 함)가 이미 있으면 다음 설정에 따라 부분 HTTP 애플리케이션 부하 분산기(LB2)를 만들어야 합니다.

  • LB1에서 사용하는 것과 동일한 프런트엔드 IP 주소
  • URL 맵에 구성된 리디렉션

이러한 부분 HTTP 부하 분산기는 HTTPS 부하 분산기와 동일한 IP 주소를 사용하고 HTTP 요청을 부하 분산기의 HTTPS 프런트엔드로 리디렉션합니다.

이 아키텍처는 다음 다이어그램에 나와 있습니다.

HTTP-HTTPS 리디렉션 구성 아키텍처.
그림 2. HTTP-HTTPS 간 리디렉션 구성 아키텍처(확대하려면 클릭)

HTTPS 부하 분산기로 트래픽 리디렉션

HTTPS 부하 분산기(LB1)가 작동하는지 확인한 후 프런트엔드를 사용하여 트래픽을 LB1로 리디렉션하도록 부분 HTTP 부하 분산기(LB2)를 만들 수 있습니다.

이 예시에서는 301 응답 코드를 사용합니다. 다른 응답 코드를 대신 사용할 수 있습니다.

gcloud로 리디렉션을 구성하려면 YAML 파일을 가져오고 대상 HTTP 프록시가 트래픽을 리디렉션하는 URL 맵을 가리키는지 확인해야 합니다. Google Cloud 콘솔을 사용하는 경우 이 작업이 자동으로 수행됩니다.

Google Cloud 콘솔에서는 리전 외부 애플리케이션 부하 분산기가 지원되지 않습니다.

gcloud

  1. YAML 파일 /tmp/web-map-http.yaml을 만듭니다. 이 예시에서는 MOVED_PERMANENTLY_DEFAULT를 응답 코드로 사용합니다.
  2.        kind: compute#urlMap
           name: web-map-http
           defaultUrlRedirect:
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
             httpsRedirect: True
           tests:
           - description: Test with no query parameters
             host: example.com
             path: /test/
             expectedOutputUrl: https://example.com/test/
             expectedRedirectResponseCode: 301
           - description: Test with query parameters
             host: example.com
             path: /test/?parameter1=value1&parameter2=value2
             expectedOutputUrl: https://example.com/test/?parameter1=value1&parameter2=value2
             expectedRedirectResponseCode: 301
           
  3. URL 맵의 유효성을 검사합니다.
  4. 테스트를 통과하고 명령어가 성공 메시지를 출력하면 변경사항을 URL 맵에 저장합니다.

  5. YAML 파일을 가져와 HTTP 부하 분산기의 URL 맵을 만듭니다. 이 URL 맵의 이름은 web-map-http입니다.
  6. 기존 URL 맵을 업데이트하면 다음 메시지가 표시됩니다.

           Url Map [web-map-http] will be overwritten.
    
           Do you want to continue (Y/n)?
           

    계속하려면 Y를 누릅니다.

  7. URL 맵이 업데이트되었는지 확인합니다. HTTP 부하 분산기의 URL 맵은 다음과 비슷합니다.
  8. web-map-http를 URL 맵으로 사용하여 새 대상 HTTP 프록시를 만들거나 기존 대상 HTTP 프록시를 업데이트합니다.
  9. 수신 요청을 프록시로 라우팅하는 전달 규칙을 만듭니다. --address 플래그는 외부 HTTPS 부하 분산기에 사용되는 IP 주소와 동일한 IP 주소인 lb-ipv4-1을 지정합니다.

HTTP-HTTPS 간 리디렉션 테스트

두 부하 분산기 모두에서 사용하는 예약된 IP 주소를 기록합니다.

이 예시에서는 예약된 IP 주소가 34.98.77.106이라고 가정합니다. http://34.98.77.106/ URL은 https://34.98.77.106/으로 리디렉션됩니다.

몇 분이 지난 후에 다음 curl 명령어를 실행하여 테스트할 수 있습니다.

curl -v http://hostname.com

샘플 결과:

* Connected to 34.98.77.106 (34.98.77.106) port 80 (#0)
> GET / HTTP/1.1
> Host: hostname.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Location: https://hostname.com
< Content-Length: 220
< Date: Fri, 30 Jul 2021 21:32:25 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://hostname.com">here</A>.
</BODY></HTML>
* Connection #0 to host hostname.com left intact