전역 외부 HTTP(S) 부하 분산기의 HTTP-HTTPS 간 리디렉션 설정

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 페이지에서는 전역 외부 HTTP(S) 부하 분산기의 HTTP-HTTPS 리디렉션을 설정하는 방법을 보여줍니다. 이 페이지는 전역 외부 HTTP(S) 부하 분산기(기본)에만 적용됩니다. 다른 모드에서 부하 분산기를 사용하는 경우 다음 페이지 중 하나를 참조하세요.

이 예시에서는 URL 리디렉션을 사용하여 포트 80(HTTP)에서 포트 443(HTTPS)로 모든 요청을 리디렉션하는 방법을 보여줍니다.

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

새 HTTPS 부하 분산기

새 HTTPS 부하 분산기를 만드는 경우 Google Cloud 콘솔을 사용하여 HTTP-HTTPS 간 리디렉션을 설정할 수 있습니다.

HTTPS 부하 분산기의 프런트엔드를 만드는 동안 다음 단계를 사용합니다.

  1. Google Cloud 콘솔에서 부하 분산기의 구성 페이지로 이동합니다.

    부하 분산으로 이동(고급 트래픽 관리)

  2. 프런트엔드 구성을 클릭합니다.
  3. 프로토콜에서 HTTPS(HTTP/2 포함)를 선택합니다.
  4. IP 주소에서 예약된 IP 주소를 선택합니다.
  5. HTTP-HTTPS 리디렉션 사용 설정 체크박스를 클릭하여 리디렉션을 만듭니다.

체크박스를 선택할 수 있으려면 HTTPS 프로토콜을 선택하고 예약된 IP 주소(임시 아님)를 사용해야 합니다.

Google Cloud 콘솔의 HTTP-HTTPS 간 리디렉션 체크박스
그림 1. Google Cloud 콘솔의 HTTP-HTTPS 간 리디렉션 체크박스 (확대하려면 클릭)

백엔드 유형에 따라 다음 가이드 중 하나의 Google Cloud 콘솔 안내를 따라 이 설정을 완료합니다.

HTTP-HTTPS 리디렉션 체크박스를 설정하면 URL 맵, 전달 규칙, 대상 HTTP 프록시로 구성되는 부분 HTTP 부하 분산기가 추가로 자동으로 생성됩니다. 이러한 부분 HTTP 부하 분산기는 HTTPS 부하 분산기와 동일한 IP 주소를 사용하고 HTTP 요청을 부하 분산기의 HTTPS 프런트엔드로 리디렉션합니다. 301 Moved Permanently를 기본 리디렉션 응답 코드로 사용합니다.

HTTPS 부하 분산기가 생성된 다음 부하 분산기 목록에서 -redirect 서픽스와 함께 부분 HTTP 부하 분산기를 볼 수 있습니다. 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 콘솔에서는 리전 외부 HTTP(S) 부하 분산기가 지원되지 않습니다.

콘솔

구성 시작
  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. HTTP(S) 부하 분산에서 구성 시작을 클릭합니다.
  3. 인터넷 연결 또는 내부 전용 아래에서 인터넷 트래픽을 VM으로 분산을 선택합니다.
  4. 전역 또는 리전에서 전역 HTTP(S) 부하 분산기를 선택합니다.
  5. 부하 분산기 이름http-redirect 같은 이름을 입력합니다.
  6. 계속하려면 창을 열어둡니다.
백엔드 구성 건너뛰기
  1. 백엔드 구성 섹션을 건너뜁니다.
URL 맵에서 리디렉션 구성
  1. 화면의 왼쪽 열에서 호스트 및 경로 규칙을 클릭합니다.
  2. 고급 호스트 및 경로 규칙(URL 리디렉션, URL 재작성)을 선택합니다.
  3. 작업에서 다른 호스트/경로로 클라이언트 리디렉션을 선택합니다.
  4. 프리픽스 리디렉션 필드를 비워둡니다.
  5. 경로 리디렉션에서 프리픽스 리디렉션을 선택합니다.
  6. 경로 값 필드는 비워둡니다.
  7. 리디렉션 응답 코드에서 301-영구 이전을 선택합니다.
  8. HTTPS 리디렉션에서 사용 설정을 선택합니다.
  9. 완료를 클릭합니다.
  10. 계속하려면 부하 분산기 구성 페이지를 열어 둡니다.
LB1에 사용된 것과 동일한 IP 주소로 HTTP 전달 규칙 구성
  1. 부하 분산기 구성 페이지에서 프런트엔드 구성을 클릭합니다.
  2. 프로토콜HTTP로 설정합니다.
  3. IP 주소를 HTTPS 부하 분산기에 사용한 IP 주소와 *동일한* IP 주소로 설정합니다.
  4. HTTP 트래픽을 허용하려면 포트80으로 설정되어 있는지 확인합니다.
  5. 완료를 클릭합니다.
  6. 계속하려면 창을 열어둡니다.
  7. 구성 검토
  8. 왼쪽 패널에서 검토 및 완료를 클릭합니다.
  9. 만들려던 설정과 현재 설정을 비교합니다.
  10. 모든 설정이 올바른 것으로 확인되면 만들기를 클릭합니다.

완료되면 Google Cloud 콘솔에 다음과 같이 두 개의 부하 분산기가 표시됩니다.

두 부하 분산기 모두

Google Cloud 콘솔은 다음과 같이 web-map-http 부하 분산기에 대한 정보를 표시합니다.

HTTP 부하 분산기

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.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    테스트를 통과하고 명령어가 성공 메시지를 출력하면 변경사항을 URL 맵에 저장합니다.

  5. YAML 파일을 가져와 HTTP 부하 분산기의 URL 맵을 만듭니다. 이 URL 맵의 이름은 web-map-http입니다.
  6.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    기존 URL 맵을 업데이트하면 다음 메시지가 표시됩니다.

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

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

  7. URL 맵이 업데이트되었는지 확인합니다. HTTP 부하 분산기의 URL 맵은 다음과 비슷합니다.
  8.        gcloud compute url-maps describe web-map-http
           
           creationTimestamp: '2020-03-23T10:53:44.976-07:00'
           defaultUrlRedirect:
             httpsRedirect: true
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
           fingerprint: 3A5N_RLrED8=
           id: '2020316695093397831'
           kind: compute#urlMap
           name: web-map-http
           selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
           
  9. web-map-http를 URL 맵으로 사용하여 새 대상 HTTP 프록시를 만들거나 기존 대상 HTTP 프록시를 업데이트합니다.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    OR
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. 수신 요청을 프록시로 라우팅하는 전달 규칙을 만듭니다. --address 플래그는 외부 HTTPS 부하 분산기에 사용되는 IP 주소와 동일한 IP 주소인 lb-ipv4-1을 지정합니다.
  12.        gcloud compute forwarding-rules create http-content-rule \
               --load-balancing-scheme=EXTERNAL_MANAGED \
               --address=lb-ipv4-1 \
               --network-tier=PREMIUM \
               --global
               --target-http-proxy=http-lb-proxy \
               --ports=80
           

커스텀 헤더 추가

선택적으로 HTTP Strict-Transport-Security 헤더를 HTTPS 부하 분산기의 백엔드 서비스에 다음과 같이 추가합니다.

  • 헤더 이름: Strict-Transport-Security
  • 헤더 값: max-age=31536000; includeSubDomains; preload

이 설정은 클라이언트가 HTTP를 통해 URL에 액세스하려고 할 때 브라우저가 리디렉션을 수행하도록 커스텀 헤더를 클라이언트에 보냅니다.

백엔드 서비스 구성에 커스텀 헤더를 추가하려면 --custom-response-header 플래그를 사용합니다.

gcloud compute backend-services update BACKEND_SERVICE_NAME_LB1 \
    --global \
    --custom-response-header='Strict-Transport-Security:max-age=31536000; includeSubDomains; preload'

자세한 내용은 커스텀 헤더 만들기를 참조하세요.

HTTP-HTTPS 간 리디렉션 테스트

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

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

이 예시에서는 예약된 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

다음 단계