הגדרת הפניה אוטומטית מ-HTTP ל-HTTPS למאזני עומסים חיצוניים אזוריים של אפליקציות

בדף הזה מוסבר איך להגדיר הפניה אוטומטית מ-HTTP ל-HTTPS למאזן עומסים חיצוני אזורי של אפליקציות (ALB). הדף הזה רלוונטי רק למאזן עומסים חיצוני אזורי של אפליקציות (ALB). אם אתם משתמשים במאזן עומסים במצב אחר, כדאי לעיין באחד מהדפים הבאים:

בדוגמה הזו מוצג איך להשתמש בהפניות אוטומטיות של מפת URL כדי להפנות את כל הבקשות מ-HTTP ל-HTTPS. בדוגמה הזו מוסבר איך להגדיר הפניות אוטומטיות באמצעות היציאות המוכרות 80 (ל-HTTP) ו-443 (ל-HTTPS). עם זאת, לא חובה להשתמש במספרי היציאה הספציפיים האלה. כל כלל העברה של מאזן עומסים של אפליקציה יכול להפנות ליציאה אחת מתוך 1-65535.

פרוטוקול HTTPS משתמש ב-TLS (או ב-SSL) כדי להצפין בקשות ותשובות של HTTP, וכך הופך את החיבור לבטוח ומאובטח יותר. באתר שמשתמש ב-HTTPS, כתובת ה-URL מתחילה ב-https:// במקום ב-http://.

למאזני עומסים חדשים מסוג HTTPS

מאזני עומסים חיצוניים אזוריים של אפליקציות (ALB) לא תומכים ביצירת הפניות אוטומטיות מ-HTTP ל-HTTPS בזמן יצירת מאזן עומסים חדש. קודם צריך לפעול לפי ההוראות במדריך בנושא קצה עורפי של Compute Engine כדי ליצור מאזן עומסים חדש. אחר כך תוכלו להשתמש בהוראות שבקטע הבא כדי להגדיר הפניה אוטומטית לכל הבקשות מ-HTTP ל-HTTPS.

ההליך הזה מניח שכבר יש לכם מאזן עומסים חיצוני מסוג HTTPS שמציג תנועת HTTPS ביציאה 443.

למאזני עומסים קיימים

אם כבר יש לכם מאזן עומסים של אפליקציות ב-HTTPS (שנקרא כאן LB1) שמשרת תעבורת HTTPS ביציאה 443, אתם צריכים ליצור מאזן עומסים חלקי של אפליקציות ב-HTTP (שנקרא כאן LB2) עם ההגדרה הבאה:

  • אותה כתובת IP של חזית העורף שמשמשת את LB1
  • הפניה אוטומטית שהוגדרה במפת URL

מאזן העומסים החלקי של HTTP משתמש באותה כתובת IP כמו מאזן העומסים של HTTPS, ומפנה בקשות HTTP לחלק הקדמי של מאזן העומסים של HTTPS.

הארכיטקטורה הזו מוצגת בתרשים הבא.

ארכיטקטורה של הגדרת הפניה אוטומטית מ-HTTP ל-HTTPS.
איור 2. ארכיטקטורה של הגדרת הפניה אוטומטית מ-HTTP ל-HTTPS (אפשר ללחוץ כדי להגדיל).

הפניית תנועה למאזן העומסים של HTTPS

אחרי שמוודאים שמאזן העומסים של HTTPS‏ (LB1) פועל, אפשר ליצור את מאזן העומסים החלקי של HTTP‏ (LB2) עם קצה קדמי שהוגדר להפניה אוטומטית של תעבורה אל LB1.

בדוגמה הזו נעשה שימוש בקוד התגובה 301. במקום זאת, אפשר להשתמש בקוד תגובה אחר.

כדי להגדיר את ההפניה האוטומטית באמצעות gcloud, צריך לייבא קובץ YAML ולוודא ש-Proxy ה-HTTP של היעד מפנה למפת URL שמפנה את התנועה. אם אתם משתמשים במסוף Google Cloud , המערכת מטפלת בזה בשבילכם.

אין תמיכה במאזני עומסים חיצוניים אזוריים של אפליקציות (ALB) במסוף 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 של מאזן העומסים של HTTP על ידי ייבוא קובץ ה-YAML. השם של מפת ה-URL הזו הוא web-map-http.
  4.        gcloud compute url-maps import web-map-http \
               --source /tmp/web-map-http.yaml \
               --region=REGION
           

    אם אתם מעדכנים מפת URL קיימת, תופיע ההודעה הבאה:

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

    כדי להמשיך, מקישים על Y.

  5. מוודאים שמפת URL מעודכנת. מפת ה-URL של מאזן העומסים מסוג HTTP אמורה להיראות בערך כך:
  6.        gcloud compute url-maps describe web-map-http \
               --region=REGION
           
           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/regions/REGION/urlMaps/web-map-http
           
  7. יוצרים proxy חדש מסוג HTTP ליעד או מעדכנים proxy קיים מסוג HTTP ליעד, באמצעות web-map-http כמפת כתובות ה-URL.
  8.        gcloud compute target-http-proxies create http-lb-proxy \
               --url-map=web-map-http \
               --region=REGION
           
    או
            gcloud compute target-http-proxies update http-lb-proxy \
               --url-map=web-map-http \
               --region=REGION
           
  9. יוצרים כלל העברה כדי להפנות בקשות נכנסות לשרת הפרוקסי. הדגל --address מציין את lb-ipv4-1, שהיא אותה כתובת IP שמשמשת למאזן העומסים החיצוני מסוג HTTPS.
  10.        gcloud compute forwarding-rules create http-content-rule \
               --load-balancing-scheme=EXTERNAL_MANAGED \
               --address=lb-ipv4-1 \
               --network-tier=STANDARD \
               --region=REGION \
               --target-http-proxy=http-lb-proxy \
               --target-http-proxy-region=REGION \
               --ports=80
           

בדיקת ההפניה האוטומטית מ-HTTP ל-HTTPS

שימו לב לכתובת ה-IP השמורה שבה אתם משתמשים בשני מאזני העומסים.

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

בדוגמה הזו, נניח שכתובת ה-IP השמורה היא 34.98.77.106. כתובת ה-URL‏ http://34.98.77.106/ מפנה אל 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

המאמרים הבאים