מבוא לשרתי אינטרנט

הקדמה

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

אחת מתרחישי השימוש הנפוצים ביותר עבור שרתי האינטרנט היא לספק קבצים הנדרשים לעיבוד אתר בדפדפן. כאשר אתה מבקר ב־http://www.digitalocean.com, אתה מתחיל עם קליטת כתובת URL שמתחילה בקשה דרך האינטרנט. הבקשה הזו עוברת דרך מספר שכבות, אחת או יותר מהן יהיה שרת אינטרנט. שרת האינטרנט הזה יוצר תגובה לבקשתך, שבמקרה זה הוא האתר של DigitalOcean, במיוחד דף הבית. מקוה שזה קורה במהירות ועם זמינות 24/7.

בעוד כל מבקר בדף הבית של DigitalOcean יחווה אותו כעמוד אינטרנט אחד, בפועל רוב העמודים האינטרנטיים המודרניים היום הם פועלי של מקורות רבים. שרתי האינטרנט פועלים כתיווך בין החלק האחורי והחזיתי, מספקים משאבים כמו קבצי HTML ו־CSS לנתוני JSON, הכל מיוצר באופן דינמי בשלב האחרון או מוגש סטטית. אם אתה מתכוון לעבוד עם אתרי אינטרנט או אפליקציות מקוונות בכל יכולת, כדאי מאוד להתמקם ביסודות של מהו שרת אינטרנט וכיצד הוא פועל.

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

שימושים נפוצים

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

הנה כמה משימות התקשורת הנפוצות שמטפלות בהן שרתי האינטרנט:

  • מספק קבצי HTML, CSS ו-JavaScript.
  • מספק תמונות וסרטונים.
  • מטפל בהודעות שגיאת HTTP.
  • מטפל בבקשות משתמש, לעיתים רבות באופן סטנדרטי.
  • מכוון תאימת כתובת URL ותיקון שוב.
  • מעבד ומספק תוכן דינמי.
  • דוחס תוכן לשימוש ולמהירות נתונים מיטבית.
  • מאפשר אחסון מטמון של הדפים הסטטיים שלך בדפדפן.

במונחים מעשיים, הנה כמה פרוייקטים אישיים שיכולים לכלול שרת אינטרנט:

  • אתה רוצה ליצור אתר אינטרנט.
  • אתה רוצה ליצור אפליקציה שמתחברת לאינטרנט.

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

מטרות של שרת אינטרנט

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

  • זמינות: מתייחס לזמן בו השרת האינטרנט מקוון ופעיל. אתרי האינטרנט צריכים להיות באוויר בכל עת כדי לשרת משתמשים, כך שזמן פעילות גבוה הוא המטרה. זה גם מתרגם ליציבות ולחזיתיות. כאשר משתמש נכנס ל-URL או לוחץ על קישור אל האתר שלך, הדף הצפוי צריך לטעון בכל פעם, ובכל זמן נתון. היוצא מן הכלל צריכות להיות ספירות מתוכננות לשדרוגים או לתחזוקה. שרת אינטרנט שהוא מוג'ג' או קורס בזמנים רנדומליים משפיע באופן יתר על חוויית המשתמש שלך.
  • מהירות: הדפים שלך צריכים לטעון במהירות האפשרית. המשתמשים רוצים שבקשותיהם יתממשו מיידית, אחרת יש סיכוי שיאבדו. בדף אינטרנט שטוען באיטיות, גם אם המשתמש שוהה בזמן הטעינה הראשוני, כל הטעינה הארוכה הבאה תוריד את רצון ההמשך שלו להישאר או לבקר שוב.
  • קונקורנסיות: מתייחס לטיפול בבקשות מרובות המתקבלות בו זמנית. כשיש יותר מדי אנשים שמנסים לבקר באתר שלך בו זמנית, זה נראה כמו דבר טוב, אך זה מהפך לבעיה אמיתית כאשר זמני הטעינה אטים מאוד וכשלם השרת שלך קורס. לשרת הפיזי או הווירטואלי שלך יש רק משאבים מסוימים כמו זיכרון RAM וכוח חישוב CPU, ושרתי האינטרנט חייבים להשתמש במשאבים אלה ביעילות.
  • גמישות: גמישות מתייחסת להפיכת השרתים הקיימים שלך לחזקים יותר דרך השתיוב האנכי, או הוספת שרתים נוספים להגדרתך דרך התפתחות הקנייה שלך, עשויים להגיע לנקודה שבה תזדקקו ליותר משרת רשת קטן או שניים.
  • קלות התקנה: הפעלת פרויקט במהירות היא מפתח להתרשמות של הפרויקט שלך. תהליך ההתקנה המוחשי והחוזר הוא חשוב לשרת הרשת הראשון שאתה מתקין, ולשרתי הרשת המרובים לאחר מכן כאשר אתה מתרחב.
  • תיעוד: שרתי הרשת הם מורכבים. ההתקנות הנפוצות ביותר יכולות להכניס אותך לרגל במהירות, אך צרכיך יגדלו עם הזמן. לעיתים תזדקק לתכונות שלא נהוגות כל כך. כאשר זמן כזה מגיע, תיעוד טוב הוא חיוני ליצירת פתרונות מותאמים אישית לצרכים שלך.
  • תמיכת מפתחים: אם המפתחים העיקריים אינם מחוייבים לפרויקט שלהם, אין להתחייב לפרויקט שלך. כך כוללים תוכניות לתמיכה לטווח הארוך בתוכנה שלהם, יחד עם תמיכה מיידית לטווח הקצר שהם מספקים בצורת תיקוני באגים ותיקוני חדר.
  • תמיכה מהקהילה: צוות פיתוח יכול לטפל ברוב העבודה הכבדה, אך קהילה פועלת ותורמת למילוי החוסרים. עם פרויקטים קוד פתוח, זה יכול להביע השפעה על בסיס הקוד הממשי, אך קהילה חזקה תענה גם על שאלותיך ותעזור עם בעיות המסוימות שלך.

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

בחירת פתרון שרת אינטרנט

השרתים הפתוחים הפופולריים ביותר היום הם כרגע אפאצ'י ו-Nginx.

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

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

הנה כמה מהשוניים המרכזיים בדרכים ששרתי האינטרנט מנסים להשיג את מטרות השרת:

מבנה של קבצי הקונפיגורציה

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

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

קבצי ה־.htaccess של Apache מקלים על קונפיגורציה מפוזרת כתכונה, וכל החלטת עיצוב זורמת מההתמקדות הזו במערכת הקבצים עם שליטה ממוקדת ברמת המערכת. Nginx אינה מתמקדת באותה התמקדות במערכת הקבצים, ומתמקדת בהתאמת דפוסי URI ובקונפיגורציה מרכזית.

טיפול בקונקורנסיה

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

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

הגשת תוכן סטטי

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

Nginx מתאימה להגשת תוכן סטטי בגלל טיפולה בבקשות המבוסס על אירועים. אפאצ'י יכולה גם להגיש תוכן סטטי, אך ברוב ההגדרות, לא באותה מהירות ויעילות בזמן עומס בהשוואה ל-Nginx.

שירות תוכן דינמי

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

עיבוד תוכן דינמי מובנה מסיר שכבת ההפשטה הנוספת שבדרך כלל דורשת להעביר את הבקשה לספרייה חיצונית. אפאצ'י מיישם באופן טבעי עיבוד תוכן דינמי, עם תחנות פתרונות פופולריות כמו LAMP (Lינוקס, Aפאצ'י, Mיי אס קיואל, Pי אצ' פי). Nginx הוא יותר אגנוסטי לשפה אך מחייב ספריות חיצוניות כגון PHP-FPM לפעול כפתרון דומה למקרים של שפות כמו LAMP stack.

יכולת פרוקסי הפוכה

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

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

תמיכה באקוסיסטמה

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

אלטרנטיבות לשרת אינטרנט מסורתי

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

בנוסף, בעקבות שינויים בעדיפויות של מפתחים בהקצאת משאבי פיתוח לניהול שרתי אינטרנט, פתרונות כמו שרתי ללא שרת, CMS חסר ראש ו- Jamstack עלו כתגובה. פתרונות אלה לא דורשים שרת אינטרנט באחסון עצמי, ובמקום זאת מפשטים את שכבת השרת האינטרנטית לשירותים חיצוניים. למפתחים שאינם דורשים שליטה גרנולרית או שליטה מתקדמת יותר בשכבת השרת האינטרנטית, ניתן להתמקד בזמן פיתוח באזורים אחרים. למידע נוסף, ראה מאמר זה על Jamstack עם CMS ללא ראש או יישום Jamstack מלא עם פלטפורמת האפליקציות של DigitalOcean.

מסקנה

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

משאבים נוספים

מדריכים:

  • איך להתקין אפאצ'י: הוראות שלב אחר שלב להגדרת השרת הראשון שלך באפאצ'י. הפתרון הזה מתברר בשליטה לפיזורים מרוכזים, ובטיפול פנימי של עמודי אינטרנט דינמיים עם הוקים לשפות תכנות פופולריות כמו PHP.
  • איך להתקין Nginx: הוראות שלב אחר שלב להגדרת השרת הראשון שלך ב-Nginx. הפתרון הזה מתברר בהגדרה מרוכזת, הפצת נכסים סטטיים, פעולה כשרת פרוקסי לשורת האחורית, וטיפול בתעבורה גבוהה של כלים.
  • אפאצ'י נגד Nginx: שיקולים מעשיים: מבט עמוק יותר על שני השחקנים המרכזיים בנוף הפתרונות של שרתי האינטרנט.

מוצרי DigitalOcean:

  • דיגיטלאושן דרופלטים: שרתים פרטיים וירטואליים לבדיקה והפקת שרתי אינטרנט.
  • פונקציות DigitalOcean: פתרון בלתי-שרתי היכול להיות אלטרנטיבה לשרתים פרטיים וירטואליים. דלג על תחזוקת השרתים, והתמקד בקוד היישום שלך.

Source:
https://www.digitalocean.com/community/conceptual_articles/introduction-to-web-servers