במסמך הזה מפורטות דוגמאות להגדרות של תגובות שגיאה בהתאמה אישית. לפני שמגדירים תגובה מותאמת אישית לשגיאה, כדאי לקרוא את סקירת התגובה המותאמת אישית לשגיאה.
הגדרות לדוגמה שמתוארות בדף הזה מגדירות מדיניות מותאמת אישית של תגובות לשגיאות בשלוש רמות של משאב מפת URL – רמת מאזן העומסים, רמת דומיין כתובת ה-URL ורמת נתיב כתובת ה-URL.
הגדרות לדוגמה מבוססות על מושגים ועל הגדרות שמתוארים במסמכים הבאים:
- הגדרת מאזן עומסים גלובלי חיצוני של אפליקציות עם קצה עורפי של קבוצת מכונות וירטואליות
- יצירת קטגוריות של backend
- איך פועלות מפות של כתובות URL
- הגדרת מיפוי כתובות URL
דוגמה 1: הגדרת דף שגיאה לכל השגיאות 4xx שמשותפות לכל המארחים
בדוגמה הזו אנחנו מניחים שהגדרתם מאזן עומסים כמו שמתואר במאמר הגדרת מאזן עומסים גלובלי חיצוני של אפליקציות (ALB) עם קצה עורפי של קבוצת מכונות וירטואליות.
בדוגמה הזו, בקשות למאזן העומסים מנותבות לשירות לקצה העורפי שנקרא web-backend-service. אם הבקשה נתקלת בתשובה 4xx, מדיניות התגובה לשגיאה מותאמת אישית מוגדרת כך שהבקשה תישלח לשירות השגיאות, ואובייקט שגיאה (not-found.html) יוחזר ללקוח.
כדי ליצור מדיניות מותאמת אישית של תגובות לשגיאות, מבצעים את השלבים הבאים:
מעלים את דף השגיאה ב-HTML (
not-found.html) לקטגוריה של Cloud Storage.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
מייצאים את מפת ה-URL (
web-map-http) לקובץ בשםweb-map-http.yaml.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
לפני שמוסיפים את מדיניות תגובת השגיאה בהתאמה אישית, מפת URL (
web-map-http) כוללת הגדרה שדומה להגדרה הבאה.creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service fingerprint: d0eJJpCBpHg= kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
עורכים את
web-map-http.yamlכדי להוסיף מדיניות מותאמת אישית של תגובה לשגיאה, כמו שמודגש בהגדרת ה-YAML הבאה, בקטעdefaultCustomErrorResponsePolicy. בדוגמה הזו, מדיניות תגובה לשגיאה מוגדרת ברמת מאזן העומסים (urlMaps.defaultCustomErrorResponsePolicy).creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/not-found.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET fingerprint: d0eJJpCBpHg= kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-httpמומלץ לאחסן את כל אובייקטי השגיאה בקטגוריה של Cloud Storage, ושהקטגוריה הזו תהיה קטגוריית קצה עורפי שמצורפת למאזן העומסים. קטגוריות של Cloud Storage מספקות דרך פשוטה לאחסון אובייקטים של שגיאות ולהחזרתם ללקוחות באמצעות מאזן העומסים. עם זאת, אפשר גם להציג דפי שגיאה ונכסים קשורים בלי להשתמש בדלי של קצה עורפי. לדוגמה, אפשר להשתמש בשירות קצה עורפי שמפנה לקצה עורפי של קבוצת מכונות וירטואליות, שבו מוגדר שרת Apache להצגת דף תגובה מותאם אישית לשגיאה.
מעדכנים את מפת ה-URL על ידי ייבוא ההגדרה העדכנית מ-
web-map-http.yaml.gcloud compute url-maps import web-map-http --source web-map-http.yaml
אחרי שמעדכנים את מפת ה-URL, צריך לחכות זמן מה לפני שמתחילים לשלוח תנועה לכתובת ה-IP של מאזן העומסים.
שליחת בקשה לדף שלא קיים.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
התוכן של השגיאה מ-
not-found.htmlמוצג ומוחזר קוד סטטוס HTTP404.
דוגמה 2: הגדרת דף שגיאה לקוד שגיאה ספציפי עבור מארח ספציפי
הדוגמה הזו מבוססת על הדוגמה הקודמת – הגדרת דף שגיאה לכל השגיאות 4xx שמשותפות לכל המארחים. בדוגמה הזו מניחים שמאזן עומסים כבר מוגדר כך שבקשות למארח video.example.com מנותבות לשירות לקצה העורפי שנקרא video-backend-service. אם בקשה נכשלת באימות על ידי שירות הקצה העורפי, השירות מחזיר תשובת 401 (Unauthorized). מדיניות התגובה לשגיאה מותאמת אישית מוגדרת כך שתשלח את הבקשה לשירות השגיאות, ואובייקט שגיאה (video-obtain-authorization.html) יוחזר ללקוח.
ברוב המקרים, תוכן השגיאה יכלול קישורים לנכסים – לדוגמה, תמונה של לוגו. הלקוח שולח בקשות לנכסים שמפנים אליהם בדף השגיאה, ובקשות נוספות נשלחות למאזן העומסים כדי לאחזר אותם.
לאחר מכן, מאזן העומסים מגיב לבקשה ומחזיר את הנכסים המקושרים.
כדי לעשות את זה, מאחסנים את הנכסים האלה באותה קטגוריית קצה עורפי שצוינה ב-defaultCustomErrorResponsePolicy ומוסיפים כלל לניתוב בקשות מכתובות URL של נכסים (לדוגמה, /assets/logo.svg) לקטגוריית הקצה העורפי. התגובה של מאזן העומסים לבקשה של נכסים מקושרים היא לא תגובת שגיאה, אלא תגובה רגילה, כמו שמוצג בהגדרה הבאה.
pathMatchers:
...
pathRules:
- service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET
paths:
- /assets
בנוסף, המדיניות מאפשרת להגדיר מה צריך להיות קוד התגובה הסופי לבקשה. בדוגמה הזו, קוד התגובה השתנה מ-401 ל-200
על ידי ציון הערך 200 ל-overrideResponseCode. בכל שאר השגיאות מסוג 4xx, תוכן השגיאה ב-not-found.html מוחזר ללקוח, וקוד תגובת ה-HTTP המקורי משירות הקצה העורפי נשמר.
כפי שמוצג בטבלה הבאה, בדוגמה הזו מוגדרות שתי מדיניות תגובות לשגיאות בהתאמה אישית. המדיניות הזו נוצרת ברמת מאזן העומסים וברמת הדומיין של כתובת ה-URL.
| רמת המדיניות | שדה API | התאמה של קוד תגובת HTTP | שירות שגיאות | אובייקט השגיאה שמוחזר |
|---|---|---|---|---|
| הדומיין של כתובת ה-URL | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
| מאזן עומסים | urlMaps.defaultCustomErrorResponsePolicy |
All 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
כדי ליצור מדיניות מותאמת אישית לתגובת שגיאה עבור קוד השגיאה 401 של המארח video.example.com, פועלים לפי השלבים הבאים:
מעלים את דף השגיאה ב-HTML (
video-obtain-authorization.html) ואת הנכסים הקשורים (logo.svg) לקטגוריה של Cloud Storage.gcloud storage cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/ gcloud storage cp Desktop/logo.svg gs://GCS_BUCKET_NAME/assets/
מייצאים את מפת ה-URL (
web-map-http) לקובץ בשםweb-map-http.yaml.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
עורכים את
web-map-http.yamlכדי להוסיף מדיניות מותאמת אישית של תגובה לשגיאה, כמו שמודגש בהגדרת ה-YAML הבאה, בקטעdefaultCustomErrorResponsePolicy. בדוגמה הזו, מדיניות מותאמת אישית של תגובות לשגיאות מוגדרת ברמת מאזן העומסים (urlMaps.defaultCustomErrorResponsePolicy) וברמת דומיין כתובת ה-URL (pathMatchers[].defaultCustomErrorResponsePolicy).מכיוון ששירות השגיאות לא מוגדר ברמת הדומיין של כתובת ה-URL, שירות השגיאות ברמת הדומיין של כתובת ה-URL מוגדר כברירת מחדל לשירות השגיאות שמוגדר ברמה גבוהה יותר, כלומר ברמת איזון העומסים.
creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/not-found.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET fingerprint: d0eJJpCBpHg= hostRules: - hosts: - video.example.com pathMatcher: path-matcher-1 kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-backend-service name: path-matcher-1 defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 401 path: "/video-obtain-authorization.html overrideResponseCode: 200 // The `errorService` in `pathMatchers[].defaultCustomErrorResponsePolicy` references the // error service configured in `urlMaps.defaultCustomErrorResponsePolicy`. // A URL map path rule to route requests from asset URLs (for example, "/assets/logo.svg") to the backend bucket. pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assetsמעדכנים את מפת ה-URL על ידי ייבוא ההגדרה העדכנית מ-
web-map-http.yaml.gcloud compute url-maps import web-map-http --source web-map-http.yaml
אחרי שמעדכנים את מפת ה-URL, צריך לחכות זמן מה לפני שמתחילים לשלוח תנועה לכתובת ה-IP של מאזן העומסים.
שולחים בקשה למארח לקבלת כתובת URL שנדרשת לה הרשאה.
curl -I http://video.example.com/a-page-that-needs-authorization
התוכן של השגיאה מ-
video-obtain-authorization.htmlמוצג, ומוחזר קוד הסטטוס200של HTTP.
דוגמה 3: הגדרת מדיניות מפורטת של תגובות שגיאה מותאמות אישית לדומיינים, לנתיבים ולקודי תגובה שונים
בדוגמה הזו אפשר לראות איך להתאים אישית תגובות שגיאה ספציפיות עבור דומיינים שונים של כתובות URL, נתיבי כתובות URL וקודי תגובות שגיאת HTTP.
ההסבר על הגדרת תגובת שגיאה מותאמת אישית בדוגמה הזו מבוסס על ההנחות הבאות:
הגדרתם מפת URL עבור מאזן עומסים חיצוני של אפליקציות עם ניתוב מבוסס-מארח ונתיב, כמו שמוצג בתמונה הבאה.
הגדרה לדוגמה של שירות לקצה העורפי (לחצו כדי להגדיל) הגדרתם שתי קטגוריות של backend בשם
BUCKET_1ו-BUCKET_2כדי להחזיר את דפי השגיאה המותאמים אישית.
כפי שמוצג בטבלה הבאה, בדוגמה הזו מוגדרות ארבע מדיניות תגובה לשגיאות בהתאמה אישית. כללי המדיניות האלה נוצרים בשלוש רמות בסדר העדיפות הבא:
- נתיב כתובת ה-URL (
pathMatchers[].pathRules[].customErrorResponsePolicy) - הדומיין של כתובת ה-URL (
pathMatchers[].defaultCustomErrorResponsePolicy) - מאזן עומסים (
urlMaps.defaultCustomErrorResponsePolicy)
| רמת המדיניות | בקש כתובת אתר | התאמה של קוד תגובת HTTP | שירות שגיאות | אובייקט השגיאה שמוחזר |
|---|---|---|---|---|
| נתיב כתובת ה-URL | example.net/video/hd/* |
404 | BUCKET-2 |
not-found-hd-videos-404.html |
| נתיב כתובת ה-URL | example.net/video/sd/* |
404 | BUCKET-2 |
not-found-sd-videos-404.html |
| הדומיין של כתובת ה-URL | example.net/* |
All 4xx | BUCKET-1 |
example-net-4xx.html |
| מאזן עומסים | Any |
כל השגיאות מסוג 4xx או 5xx | BUCKET-1 |
error-page-generic.html |
מדיניות תגובת השגיאה המותאמת אישית ברמה של מאזן העומסים מוחלת רק אם המדיניות תואמת לתנאי השגיאה ולא הוגדרה מדיניות תואמת לקוד השגיאה ברמות הנמוכות יותר, כלומר בדומיין של כתובת ה-URL או בנתיב ה-URL.
באופן דומה, מדיניות תגובת השגיאה המותאמת אישית ברמה של דומיין כתובת ה-URL מוחלת רק אם המדיניות תואמת לתנאי השגיאה ולא הוגדרה מדיניות תואמת לקוד השגיאה ברמה הנמוכה יותר, כלומר נתיב כתובת ה-URL. בדוגמה הזו, אם בקשה לכתובת ה-URL www.example.net/video/hd נתקלת בתגובה 404, הקובץ not-found-hd-videos-404.html מוחזר. עם זאת, אם מתקבלת תגובה 404 לבקשה לכתובת ה-URL www.example.net/video/, הקובץ example-net-4xx.html מוחזר.
כדי ליצור מדיניות מותאמת אישית לתגובות שגיאה בשלוש רמות של מפת URL, פועלים לפי השלבים הבאים:
מעלים את אובייקטי השגיאה לקטגוריות של Cloud Storage.
gcloud storage cp Desktop/error-page-generic.html gs://GCS_BUCKET_1_NAME/ gcloud storage cp Desktop/example-net-4xx.html gs://GCS_BUCKET_1_NAME/ gcloud storage cp Desktop/not-found-sd-videos-404.html gs://GCS_BUCKET_2_NAME/ gcloud storage cp Desktop/not-found-hd-videos-404.html gs://GCS_BUCKET_2_NAME/
מייצאים את מפת ה-URL (
video-org-url-map) לקובץ בשםvideo-org-url-map.yaml.gcloud compute url-maps export video-org-url-map --destination video-org-url-map.yaml
לפני שמוסיפים את מדיניות תגובת השגיאה בהתאמה אישית, מפת URL (
video-org-url-map) כוללת הגדרה שדומה להגדרה הבאה.creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-mapעורכים את
video-org-url-map.yamlכדי להוסיף מדיניות מותאמת אישית של תגובות לשגיאות, כמו שמודגש בהגדרת ה-YAML הבאה, בקטעdefaultCustomErrorResponsePolicy.מכיוון ששירות השגיאות לא מוגדר ברמת הדומיין של כתובת ה-URL, שירות השגיאות ברמת הדומיין של כתובת ה-URL מוגדר כברירת מחדל לשירות השגיאות שמוגדר ברמה גבוהה יותר, כלומר ברמת איזון העומסים.
creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx - 5xx path: '/error-page-generic.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/example-net-4xx.html' // The `errorService` in `pathMatchers[].defaultCustomErrorResponsePolicy` references the // error service configured in `urlMaps.defaultCustomErrorResponsePolicy`. pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd customErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 404 path: '/not-found-hd-videos-404.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-2 - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd customErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 404 path: '/not-found-sd-videos-404.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-2 selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-mapמעדכנים את מפת ה-URL על ידי ייבוא ההגדרה העדכנית מ-
video-org-url-map.yaml.gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
אחרי שמעדכנים את מפת ה-URL, צריך לחכות זמן מה לפני שמתחילים לשלוח תנועה לכתובת ה-IP של מאזן העומסים.
שליחת בקשה לדף שלא קיים.
curl -I http://example.net/a-page-that-does-not-exist
התוכן של השגיאה מ-
example-net-4xx.htmlמוצג.באופן דומה, כדאי לבדוק כתובות URL אחרות עם דומיינים ונתיבים שונים.