Mengalihkan permintaan HTTP ke HTTPS

Contoh ini menunjukkan cara menggunakan pengalihan peta URL untuk mengalihkan semua permintaan dari HTTP ke HTTPS. Contoh ini menunjukkan cara menyiapkan pengalihan menggunakan port terkenal 80 (untuk HTTP) dan 443 (untuk HTTPS). Namun, Anda tidak harus menggunakan nomor port tertentu ini. Setiap aturan penerusan untuk Load Balancer Aplikasi dapat mereferensikan satu port dari 1—65535.

HTTPS menggunakan TLS (SSL) untuk mengenkripsi permintaan dan respons HTTP, sehingga membuatnya lebih aman. Situs yang menggunakan HTTPS memiliki https:// di awal URL-nya, bukan http://.

Untuk Load Balancer Aplikasi HTTPS baru

Jika membuat Load Balancer Aplikasi HTTPS baru, Anda dapat menggunakan KonsolGoogle Cloud untuk menyiapkan pengalihan HTTP ke HTTPS.

Saat membuat frontend load balancer, gunakan langkah-langkah berikut:

  1. Di Konsol Google Cloud , buka halaman konfigurasi load balancer.

    Buka Load balancing (Membuat Load Balancer Aplikasi eksternal global)

  2. Untuk Load balancer name, masukkan sebuah nama.
  3. Klik Frontend configuration.
  4. Untuk Protocol, pilih HTTPS (includes HTTP/2).
  5. Untuk IP address, klik Create IP address. Masukkan nama untuk alamat IP statis yang baru, lalu klik Reserve.
  6. Untuk Certificate, pilih sertifikat SSL.
  7. Untuk membuat pengalihan, centang kotak Enable HTTP to HTTPS Redirect.
  8. Klik Done.
  9. Selesaikan konfigurasi backend dan konfigurasi lain yang diperlukan.
  10. Klik Create.

Anda harus memilih protokol HTTPS dan menggunakan alamat IP yang dicadangkan (bukan efemeral) agar dapat memilih kotak centang.

Kotak centang pengalihan HTTP ke HTTPS di Konsol Google Cloud .
Gambar 1. Kotak centang pengalihan HTTP ke HTTPS di Konsol Google Cloud (klik untuk memperbesar).

Bergantung pada jenis backend Anda, gunakan petunjuk Konsol Google Cloud dari salah satu panduan berikut untuk menyelesaikan penyiapan ini:

Mencentang kotak Enable HTTP to HTTPS Redirect akan otomatis membuat load balancer HTTP parsial tambahan yang terdiri atas peta URL, aturan penerusan, dan proxy HTTP target. Load balancer HTTP parsial ini menggunakan alamat IP yang sama dengan load balancer HTTPS Anda dan mengalihkan permintaan HTTP ke frontend HTTPS load balancer Anda. Metode ini menggunakan 301 Moved Permanently sebagai kode respons pengalihan default.

Setelah load balancer HTTPS dibuat, Anda dapat melihat load balancer HTTP parsial dalam daftar load balancer, dengan akhiran -redirect. Uji penyiapan Anda menggunakan langkah-langkah dalam Menguji pengalihan HTTP ke HTTPS.

Untuk load balancer yang sudah ada

Jika Anda sudah memiliki Load Balancer Aplikasi HTTPS (disebut di sini sebagai LB1) yang melayani traffic HTTPS di port 443, Anda harus membuat Load Balancer Aplikasi HTTP parsial (disebut di sini sebagai LB2) dengan penyiapan berikut:

  • Alamat IP frontend yang sama dengan yang digunakan oleh LB1
  • Pengalihan yang dikonfigurasi di peta URL

Load balancer HTTP parsial ini menggunakan alamat IP yang sama dengan load balancer HTTPS Anda dan mengalihkan permintaan HTTP ke frontend HTTPS load balancer Anda.

Arsitektur ini ditampilkan dalam diagram berikut.

Arsitektur konfigurasi pengalihan HTTP ke HTTPS.
Gambar 2. Arsitektur konfigurasi pengalihan HTTP ke HTTPS (klik untuk memperbesar).

Mengalihkan traffic ke load balancer HTTPS Anda

Setelah memverifikasi bahwa load balancer HTTPS (LB1) Anda berfungsi, Anda dapat membuat load balancer HTTP parsial (LB2) dengan frontend yang dikonfigurasi untuk mengalihkan traffic ke LB1.

Contoh ini menggunakan kode respons 301. Anda dapat menggunakan kode respons yang berbeda.

Untuk mengonfigurasi pengalihan dengan gcloud, Anda harus mengimpor file YAML dan memastikan proxy HTTP target Anda mengarah ke peta URL yang mengalihkan traffic. Jika Anda menggunakan Konsol Google Cloud , hal ini akan ditangani secara otomatis.

Load Balancer Aplikasi eksternal regional tidak didukung di Konsol Google Cloud .

gcloud

  1. Buat file YAML /tmp/web-map-http.yaml. Contoh ini menggunakan MOVED_PERMANENTLY_DEFAULT sebagai kode respons.
  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. Validasi peta URL.
  4.        gcloud compute url-maps validate --source /tmp/web-map-http.yaml
           

    Jika pengujian lulus dan perintah menampilkan pesan keberhasilan, simpan perubahan pada peta URL.

  5. Buat peta URL load balancer HTTP dengan mengimpor file YAML. Nama untuk peta URL ini adalah web-map-http.
  6.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --global
           

    Jika Anda memperbarui peta URL yang ada, perintah berikut akan muncul:

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

    Untuk melanjutkan, tekan Y.

  7. Pastikan peta URL telah diperbarui. Peta URL load balancer HTTP Anda akan terlihat seperti ini:
  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. Buat proxy HTTP target baru atau perbarui proxy HTTP target yang ada, menggunakan web-map-http sebagai peta URL.
  10.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --global
           
    ATAU
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --global
           
  11. Buat aturan penerusan untuk mengarahkan permintaan masuk ke proxy. Flag --address menentukan lb-ipv4-1, yang merupakan alamat IP yang sama dengan yang digunakan untuk load balancer HTTPS eksternal.
  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
           

Menambahkan header HSTS kustom

Saat Anda menambahkan header HTTP Strict-Transport-Security ke layanan backend load balancer HTTPS, load balancer akan mengirimkan header kustom itu ke klien, sehingga saat klien mencoba mengakses URL melalui HTTP, browser akan mengalihkan permintaan tersebut. Setelan header ini adalah sebagai berikut:

  • Nama header: Strict-Transport-Security
  • Nilai header: max-age=31536000; includeSubDomains; preload

Untuk menambahkan header kustom ke konfigurasi layanan backend, gunakan flag --custom-response-header.

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

Untuk mengetahui informasi selengkapnya, baca bagian Membuat header kustom.

Menguji pengalihan HTTP ke HTTPS

Catat alamat IP yang dicadangkan yang Anda gunakan untuk kedua load balancer.

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

Dalam contoh ini, asumsikan bahwa alamat IP yang dicadangkan adalah 34.98.77.106. URL http://34.98.77.106/ dialihkan ke https://34.98.77.106/.

Setelah beberapa menit berlalu, Anda dapat mengujinya dengan menjalankan perintah curl berikut.

curl -v http://hostname.com

Contoh output:

* 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