1. ספרייה
  2. HTTP והרשת
  3. ארכיטקטורת ווב

עודכן לפני חודש

בכל פעם שאתה טוען דף אינטרנט, משהו צריך לענות. הדפדפן שלך שולח בקשה דרך האינטרנט — שאלה, בעצם — ובמקום כלשהו, תוכנה מסוימת מקבלת את השאלה הזאת, מבינה מה אתה מבקש, ושולחת חזרה את התשובה. התוכנה הזאת היא שרת האינטרנט.

כל אתר שביקרת בו אי פעם — כל חיפוש, כל רכישה, כל סרטון — עבר דרך תוכנה שעושה בדיוק את העבודה הזאת: ממתינה שתשאל, ואז עונה.

אמנם "שרת אינטרנט" מתייחס לפעמים למכונה הפיזית, אבל בהקשרים טכניים הכוונה היא לתוכנה עצמה: התוכנית שמאזינה לבקשות HTTP ושולחת תגובות HTTP.

מחזור הבקשה-תגובה

בבסיסו, שרת אינטרנט עושה שישה דברים בלולאה אינסופית:

מאזין. השרת מנטר פורטי רשת — בדרך כלל פורט 80 עבור HTTP ופורט 443 עבור HTTPS — וממתין שמישהו יתחבר.

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

מנתח. השרת קורא את בקשת ה-HTTP: איזה URL אתה מבקש? איזו שיטה (GET, POST)? אילו כותרות שלחת?

מעבד. כאן מתבצעת העבודה האמיתית. עבור קובץ סטטי, השרת מאתר אותו בדיסק. עבור בקשה דינמית, הוא עשוי להריץ קוד, לשלוח שאילתות למסדי נתונים, או לקרוא לשירותים אחרים.

מגיב. השרת שולח חזרה תגובת HTTP — קוד סטטוס, כותרות, והתוכן עצמו (HTML, JSON, תמונות — מה שביקשת).

רושם. השרת מתעד מה קרה, ויוצר יומני גישה ויומני שגיאות שמאפשרים למנהלי מערכת לראות מה מתרחש.

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

תוכן סטטי לעומת תוכן דינמי

שרתי אינטרנט מטפלים בשני סוגי עבודה שונים מהיסוד.

תוכן סטטי הוא הגשת קבצים. אתה מבקש תמונה, קובץ CSS, או מסמך HTML; השרת קורא את הקובץ מהדיסק ושולח אותו אליך ללא שינוי. אותו קובץ, אותו תוכן, בכל פעם. זה מהיר — השרת הוא בעצם תוכנית העברת קבצים מתוחכמת. תוכן סטטי ניתן לשמירה במטמון באופן אגרסיבי, לדחיסה פעם אחת ולשימוש חוזר, ולהפצה על פני CDNs ברחבי העולם.

תוכן דינמי נוצר מחדש עבור כל בקשה. כשאתה בודק את הדוא"ל שלך או צופה בפיד של הרשת החברתית שלך, השרת לא מאחזר קובץ — הוא בונה תגובה עבורך במיוחד, עכשיו, על בסיס הנתונים שלך ומצב האפליקציה הנוכחי.

עבור תוכן דינמי, שרתי אינטרנט מתממשקים עם קוד אפליקציה. שרת האינטרנט מקבל את הבקשה שלך, מעביר אותה לאפליקציה (כתובה ב-PHP, Python, JavaScript, או כל שפה אחרת), ממתין שהאפליקציה תיצור HTML, ואז שולח את התגובה שנוצרה חזרה אליך.

שרתי אינטרנט פופולריים

Apache HTTP Server הניע את האינטרנט המוקדם. שוחרר ב-1995, הוא עדיין נמצא בשימוש נרחב היום. הארכיטקטורה של Apache מקצה לכל חיבור תהליך או חוט נפרד — פשוט אבל עתיר משאבים תחת עומס גבוה. חוזקו הוא גמישות: מודולים מאפשרים לך להוסיף כמעט כל תכונה, ועשרות שנים של תיעוד מכסות כמעט כל תרחיש.

Nginx ("engine-x") נבנה ב-2004 בדיוק משום ש-Apache התקשה עם חיבורים רבים בו-זמנית. Nginx משתמש בארכיטקטורה מונעת-אירועים שבה קומץ תהליכי עובדים יכולים לשרת אלפי חיבורים בו-זמנית. זה כמו מסעדה שבה שלושה מלצרים משרתים ביעילות עשרת אלפים שולחנות — ללא רגע מנוחה. Nginx שולט בפריסות עם תעבורה גבוהה ולרוב ממוקם לפני שרתי אפליקציות כדי לטפל בקבצים סטטיים, SSL, ואיזון עומסים.

Microsoft IIS הוא שרת האינטרנט של Windows, משולב עמוק במערכת האקולוגית של Windows. אם אתה מריץ אפליקציות .NET, IIS הוא הבחירה הטבעית.

Caddy הוא שרת אינטרנט מודרני שמשיג ומחדש אוטומטית אישורי SSL ללא כל תצורה. פשטותו הופכת אותו לפופולרי לפריסות מהירות.

תצורה חיונית

מארחים וירטואליים מאפשרים לשרת אחד לאכסן אתרים מרובים. השרת קורא את כותרת ה-Host בכל בקשה כדי לקבוע איזה אתר אתה רוצה — כך עובד אחסון משותף וכך אתה יכול להריץ מספר דומיינים ממכונה אחת.

SSL/TLS מאפשר HTTPS. השרת זקוק לאישורים, תצורת צופן מתאימה וגרסאות פרוטוקול מודרניות. טעות כאן חושפת את המשתמשים שלך.

בקרת גישה קובעת מי יכול להגיע לאן. הגבלות IP, הגנת סיסמה, שילובי אימות.

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

כוונון ביצועים — פסקי זמן, הגדרות keep-alive, גדלי מאגר, דחיסה — קובע כמה משתמשים יכול השרת שלך לטפל ועד כמה הוא מגיב במהירות.

אבטחה

שרתי אינטרנט עומדים ישירות מול האינטרנט. הם מקבלים קלט מכל אחד. זה הופך את האבטחה לחובה שאין לוותר עליה.

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

הגבל גישה לקבצים. שרת האינטרנט צריך לקרוא רק קבצים שהוא צריך להגיש. תצורה שגויה חשפה קבצים רגישים אין-ספור לאינטרנט הציבורי.

השתמש ב-SSL/TLS מודרני. תצורות מיושנות מאפשרות לתוקפים ליירט תעבורה גם כשאתה חושב שאתה משתמש ב-HTTPS.

הגבל קצב בקשות. מנע שימוש לרעה על ידי הגבלת מספר הבקשות שכל לקוח בודד יכול לבצע. זה מגן מפני מתקפות מניעת שירות וניסיונות כוח גס.

הסתר מידע על גרסה. אל תספר לתוקפים בדיוק איזו גרסת תוכנה אתה מריץ.

שרתי אינטרנט לעומת שרתי אפליקציות

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

שרת אינטרנט מטפל ב-HTTP. הוא מצוין בחיבורי רשת, הגשת קבצים, סיום SSL, והבנת פרוטוקול HTTP.

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

פריסות רבות משתמשות בשניהם: Nginx מטפל בבקשות נכנסות, מגיש קבצים סטטיים, ומעביר בקשות דינמיות לשרת אפליקציות (Node.js, Django, Rails) הרץ מאחוריו. כל רכיב עושה את מה שהוא עושה הכי טוב.

אבל הגבול מטשטש. Node.js עם Express פועל כשניהם בתהליך אחד. ההבחנה היא יותר מושגית מארכיטקטורית — מדובר בתפקיד שהתוכנה ממלאת, לא בהכרח בתוכניות נפרדות.

ביצועים

טיפול בחיבורים נבדל משמעותית בין גישות שונות. תהליך לכל חיבור (המודל המסורתי של Apache) יוצר תקורה שמגבילה יכולת התרחבות. מונע-אירועים (Nginx) מטפל בחיבורים רבים עם משאבים מינימליים.

אופטימיזציית קבצים סטטיים פירושה דחיסה (gzip, Brotli), כותרות מטמון שמאפשרות לדפדפנים לאחסן קבצים מקומית, והגשה מהזיכרון במקום לגשת לדיסק בכל בקשה.

חיבורי keep-alive מאפשרים לבקשות מרובות לשתף חיבור TCP אחד, וחוסכים את עלות הקמת חיבור חדש בכל פעם. אזן את פסקי זמן ה-keep-alive: ארוך מדי מבזבז משאבים, קצר מדי מאבד את היתרון.

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

שאלות נפוצות על שרתי אינטרנט

מה ההבדל בין שרת אינטרנט לאתר אינטרנט?

אתר אינטרנט הוא תוכן — הדפים, התמונות והפונקציונליות שאתה מתקשר איתה. שרת אינטרנט הוא תוכנה שמספקת את התוכן הזה לדפדפן שלך. האתר הוא מה שאתה רואה; שרת האינטרנט הוא המנגנון שהביא אותו אליך.

האם אני צריך לבחור בין Apache ל-Nginx?

לרוב המטרות, כל אחד מהם יעשה את העבודה. ל-Nginx יש ביצועים טובים יותר עבור קבצים סטטיים ובמצבי עומס גבוה. ל-Apache יש אפשרויות תצורה גמישות יותר. פריסות גדולות רבות משתמשות ב-Nginx כ-reverse proxy לפני Apache או שרתי אפליקציות, ומפיקות את היתרונות של שניהם.

האם שרת אינטרנט יכול לרוץ על הלפטופ שלי?

כן. תוכנת שרת אינטרנט רצה בכל מקום — הלפטופ שלך, Raspberry Pi, מופע בענן. מפתחים מריצים באופן שגרתי שרתי אינטרנט מקומיים במהלך פיתוח. לתוכנה לא אכפת איפה היא רצה; היא פשוט מאזינה לבקשות ומגיבה.

למה HTTPS דורש אישורים?

HTTPS מצפין את התעבורה בין הדפדפן לשרת. אישורים מוכיחים שהשרת הוא מי שהוא טוען להיות — בלעדיהם, אתה עלול להתחבר למתחזה. רשויות אישורים מאמתות זהות לפני הנפקת אישורים, ויוצרות שרשרת אמון.

האם דף זה היה מועיל?

😔
🤨
😃
מה זה שרת אינטרנט? • ספרייה • Connected