מדריך איתור ובדיקת תאימות בין גרסאות האתר בשרתים שונים

מדריך שמסביר איך לאתר אם האתר הוא על כמה שרתים ובשביל לבדוק שגוגל רואה את האתר האמיתי ולא מגיע לגרסה שונה.

Load balancer בדרך כלל מקבע אותך לשרת אחד באמצעות Cookie (stickiness).
כדי לבדוק שרתים שונים צריך לשלוח בקשות בלי לשמור cookies.

כלומר כל request צריך להיראות כמו משתמש חדש.

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

בדפדפן:

  1. פתח DevTools
  2. Application
  3. Cookies
  4. מחק:
  5. BIGipServerweekend_Pool_Https (או את כל הקוקיז)
  6. ואז refresh.

שיטה 1 - הפשוטה ביותר

צריך לשים פה את הכתובת שרוצים לבדוק במקום מה שבדוגמה

זה שולח בקשה בלי cookies בכלל.
כך ה-Load balancer יכול לשלוח אותך כל פעם לשרת אחר.

				
					curl -I -H "Cache-Control: no-cache" -H "Pragma: no-cache" -H "Cookie:" "https://www.weekend.co.il/zimmers.aspx"
				
			

איך יודעים אם הגיע שרת אחר
תחפש שינוי ב-headers

לדוגמה:

  • ETag
  • Set-Cookie
  • CF-RAY
  • Server
  • X-* headers
  • Location

אם משהו משתנה בין בקשות = יש כמה שרתים.

שיטה 2 — בדיקה אוטומטית

				
					for /l %i in (1,1,20) do curl -I -H "Cookie:" "https://www.weekend.co.il/zimmers.aspx"
				
			

זה שולח 20 בקשות שונות.

אם יש כמה שרתים = תראה הבדלים בתגובה.

שיטה 3 — בדיקת redirect בפועל *רלוונטי אם רוצים לבדוק הפניה 301, אם אכן בוצעה בכל השרתים*

במידה ורוצים לבדוק אם כל השרתים עושים redirect

				
					curl -I -L -H "Cookie:" "https://www.weekend.co.il/zimmers.aspx"
				
			

תעשה זאת 20 פעמים.

אם באחת הבקשות אין redirect = שרת אחד לא מוגדר נכון.

שיטה 4 — בדיקת DevOps style

				
					for /l %i in (1,1,20) do curl -s -D - -o nul -H "Cookie:" "https://www.weekend.co.il/zimmers.aspx" | findstr Location
				
			

זה ידפיס רק את ה-redirect

אם כל השורות זהות = כל השרתים מתנהגים אותו דבר.

בדיקת אחידות/שוני של קובץ Robots.txt בין שרתים

מטרה

לבדוק אם בכל בקשה מתקבל קובץ שונה מהשרתים.

כאשר יש כמה שרתים מאחורי Load Balancer, כל בקשה יכולה להגיע לשרת אחר.
לכן אנחנו שומרים כמה עותקים של הקובץ ומשווים ביניהם.

פקודות ל-PowerShell

				
					curl https://www.weekend.co.il/robots.txt -o r1.txt
curl https://www.weekend.co.il/robots.txt -o r2.txt
curl https://www.weekend.co.il/robots.txt -o r3.txt
				
			

מה הפקודה עושה?

curl
כלי שמבצע בקשת HTTP כמו דפדפן.

-o r1.txt
שומר את התגובה בקובץ בשם r1.txt.

לאחר שלוש הפקודות יהיו לך שלושה קבצים:

r1.txt
r2.txt
r3.txt

כל אחד הוא תוצאה של בקשה נפרדת לשרת.

השוואת הקבצים

מטרה

לבדוק האם הקבצים שונים.

פקודה ב-PowerShell

				
					Compare-Object (Get-Content r1.txt) (Get-Content r2.txt)
				
			

מה הפקודה עושה?

Get-Content
קורא את התוכן של הקובץ.

Compare-Object
משווה בין שני מקורות נתונים.

תוצאה אפשרית
אין פלט(no output)

המשמעות: הקבצים זהים

יש פלט: 

אם מופיעות שורות: InputObject SideIndicator

המשמעות: יש הבדל בין הקבצים

ואז כנראה שרת אחר מחזיר גרסה אחרת.

בדיקת Hash של הקבצים

זו הבדיקה הכי מדויקת.

במקום להשוות טקסט, מחשבים טביעת אצבע קריפטוגרפית של הקובץ.

אם אפילו תו אחד שונה – ה-hash יהיה שונה.

פקודות ל-POWERSHELL:

				
					Get-FileHash r1.txt
Get-FileHash r2.txt
Get-FileHash r3.txt
				
			

מה הפקודה עושה? 

Get-FileHash

מחשב hash (SHA256) של הקובץ.

לדוגמה פלט:

				
					Algorithm : SHA256
Hash      : 0092CA9A10A4337A6464DC2960E3A493CA3F17277CDAB34C96BDC926B244280B
				
			

אם כל הקבצים מחזירים אותו hash:

0092CA9A10A4337A6464DC2960E3A493CA3F17277CDAB34C96BDC926B244280B

אז: כל השרתים מחזירים בדיוק אותו קובץ

אם hash שונה: server אחד מחזיר קובץ אחר

וזו בעיה.

בדיקה בלי לשמור קבצים (לפי מספר תווים)

בדיקה מהירה יותר.

המטרה היא לבדוק אם גודל התוכן משתנה בין בקשות.

פקודה

				
					(Invoke-WebRequest https://www.weekend.co.il/robots.txt).Content | Measure-Object -Character
				
			

מה הפקודה עושה?

Invoke-WebRequest
מוריד את הדף.

.Content
מוציא את תוכן הדף.

Measure-Object -Character
סופר כמה תווים יש בתוכן.

דוגמה לפלט
Characters
———-
15242

פירוש

אם בכל הבדיקות המספר זהה: 15242

אז כנראה הקובץ זהה.

אם לפעמים מתקבל:
15242
30507

זה אומר: יש שתי גרסאות שונות של הקובץ

וזה סימן שיש כמה שרתים שמחזירים תוכן שונה.