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

הקדמה

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, ושרתי האינטרנט חייבים להשתמש במשאבים אלו ביעילות.
  • גמישות: גמישות מתייחסת לאפשרות להפוך את השרתים הקיימים שלך לחזקים יותר דרך התרגשות אנכית, או להוסיף עוד שרתים להגדרה שלך דרך התרגשות אופקית. כשאתה מגדיל את הקהל שלך, ייתכן שתגיע לנקודה בה תזדקק ליותר משני שרתי אינטרנט קטנים.
  • קלות ההתקנה: להפעיל פרויקט במהירות היא מפתח לאיטרציה של הפרויקט שלך. תהליך ההתקנה הישיר והחוזר הוא חשוב לשרת האינטרנט הראשון שאתה מקים, ולשרתי האינטרנט הרבים שאתה מוסיף במהלך תהליך הגדלת המערכת שלך.
  • תיעוד: שרתי האינטרנט הם מורכבים. ההגדרות הנפוצות ביותר יכולות לעזור לך לצאת לפועל במהירות, אך צרכיך יגדלו עם הזמן. לעיתים תזדקק לתכונות שאינן בשימוש הנפוץ כל כך. כאשר הזמן מגיע, תיעוד טוב הוא חיוני ליצירת פתרונות אישיים עבור צרכיך.
  • תמיכת מפתחים: אם מפתחי הליבה לא מחויבים לפרויקט שלהם, אתה לא צריך להתחייב לפרויקט שלהם. זה כולל תוכניות לתמיכה ארוכת טווח בתוכנה שלהם, יחד עם תמיכה מיידית בצורת תיקוני באגים וצינורים.
  • תמיכה מהקהילה: צוות פיתוח ליבתי יתמודד עם רוב העבודה הכבדה, אך קהילה פועלת ותתרום למילוי הפרצות. בפרויקטים קוד פתוח, זה יכול להביע עצמו בתרומות לבסיס הקוד הממשי, אך קהילה חזקה תענה גם על שאלותיך ותסייע עם הבעיות המסוימות שלך.

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

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

השרתים הפתוחים הפופולריים ביותר היום הם Apache ו-Nginx.

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

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

להלן מספר נקודות השונות בהן שרתי האינטרנט מנסים להשיג את מטרותיו של שרת אינטרנט:

מבנה של קבצי הגדרה

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

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

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

טיפול במקביליות

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

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

שירות תוכן סטטי

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

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

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

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

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

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

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 בשימוש בעולם האמיתי תלויה במידת המרכזיות שלו בתכונות הפרוקסי ההפוכה וביעילות שלו. רבים מההתקנות של השרת מציבות מספר שרתי אינטרנט מסורתיים מאחורי פרוקסי ההפוך של Nginx, ומשתמשות ב-Nginx כדי לקבוע לאיזה שרת אינטרנט לשלוח את הבקשה על פי עומס או הגדרות כללים. תפקיד זה של האמצעי מאפשר לו אף להתמזג עם Apache בחלק מההגדרות, כאשר הוא משמש כפרוקסי ההפוך מול שרת אינטרנט מסורתי של Apache.

תמיכה בסביבת התמיכה

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

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

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

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

מסקנה

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

מדריכים:

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

מוצרים של DigitalOcean:

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

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