הקדמה
התפקיד העיקרי של שרת אינטרנט הוא לשרת דפי אינטרנט עבור אתר. דף ווב יכול להיות מופיע מקובץ HTML בודד או מערך מורכב של משאבים שמתאימים יחד. אם ברצונך לאכוף את אפליקציית האינטרנט שלך על האינטרנט, בהרבה מקרים תזדקק לשרת אינטרנט.
אחד המקרים הנפוצים ביותר לשימוש בשרתי אינטרנט הוא שירות קבצים הנחוצים להצגת אתר בדפדפן. כשאתה בוקר את http://www.digitalocean.com
, אתה מתחיל בכניסת URL שמתחיל בקשה דרך האינטרנט. הבקשה הזו עוברת דרך שכבות מרובות, אחת או יותר מהן תהיה שרת אינטרנט. השרת הזה יוצר תגובה לבקשתך, שבמקרה הזה זו האתר של DigitalOcean, במיוחד הדף הראשי. אידיאלית, זה יקרה במהירות ובזמינות 24/7.
בעוד שכל מבקר לדף הראשי של DigitalOcean יחווה אותו כדף ווב בודד, למעשה רוב הדפים הווב המודרניים היום הם שילוב של משאבים רבים. שרתי האינטרנט מתפקדים כמתווכים בין הבקן והחזית, משרתים משאבים כמו קבצי HTML ו-CSS עד למידע JSON, כולם נוצרים דינמית בזמן הפעולה או משורתים סטטית. אם אתה מתכוון לעבוד עם אתרים או אפליקציות מקוונות בכל צורה, זה מאוד שימושי להיכנע עם היסודות של מה זה שרת אינטרנט, ואיך הוא עובד.
ובעוד המונח "שרת אינטרנט" יכול להיות קשור לתוכנה עצמה או לחומרה עליה, המאמר הזה מתייחס במיוחד לתוכנה של שרת אינטרנט. עבור פרטים נוספים על ההבדל הזה, הביטו בהמאמר הבסיסי לשרתי הענן.
השימושים המקובלים
שרת אינטרנט ממשלת בקשות ברשת דרך הפרOTוקלט הHTTP והHTTPS, והוא גם נקראשרת HTTP. שרת אינטרנט מיוחד מבין בקשות הHTTP והHTTPS האלה, והוא ממואן על ידי שרתים אפליקציות (לדוגמה, Gunicorn) ושרתים לפרOTוקלטים אחרים (לדוגמה WSGI). השרתים האחרים פועלים כסף דיוקי עבור שפות בניית האחורית דרך ספרים חיצוניים, שזהו רמה של הדחקה אחרת מאשר שרתי האינטרנט.
הנה כמה מהמשימות המקובלות שמטפלים בשרתי האינטרנט:
- משלחת קבצי HTML, CSS ו JavaScript.
- משלחת תמונות וסרטונים.
- מטפלים במסרים השגרה של HTTP.
- מטפלים בבקשות המשתמשים, לרוב באופן מוטעה.
- מנועים URL התאמה ושינוי.
- מעבדים ומשלחים תוכן דינמי.
- מוצקים את התוכן עבור שימוש מועדף במידע ומהירות.
- מאפשרים את האחסון הדפדפן עבור התוכן הסטטי שלך.
במובן מעשי, הנה כמה פרוייקטים אישיים שיכולים לעסוק בשרת רשת:
- אתה רוצה ליצור אתר אינטרנט.
- אתה רוצה ליצור אפליקציה שתתחבר לאינטרנט.
הרשימה הזו אינה מקיפה, ושרת רשת אינו רק מוגבל בסוגי המידע שיכול לשרת למשתמש הקצה. לדוגמה, שרת רשת שמשרת בקשות ווב API לעיתים קרובות מגיב עם מידע בפורמט כמו JSON.
מטרות של שרת רשת
שרתי הרשת משרתים אנשים שצופים ביעדים של מהירות, זמינות, אמינות ועוד. יש להם מטרה משותפת של שרתת תוכן באינטרנט, ועל מנת להיחשב כפתרון שרת רשת ראוי, עליל לשקול את ההיבטים הבאים:
- זמן תפעול: זה מתייחס לזמן שבו שרת הרשת פעיל ומקוון. אתרים צריכים להיות מקוונים בכל עת כדי לשרת את המשתמשים, כך שזמן תפעול גבוה הוא המטרה. זה גם מתורגם ליציבות וצפויות. כשמשתמש מזין URL או קושץ על קישור לאתר שלך, הדף הצפוי צריך להיטען בכל פעם ובכל זמן. החריגים היחידים אמורים להיות זמני חוסר תפעול המתוכננים לעדכונים או תחזוקה. שרת רשת שמתרסק באופן מקרי או שבעצם משובש יפיל על חוויית המשתמשים.
- מהירות: הדפי האינטרנט שלך צריכים להיטען במהירות האפשרית. המשתמשים רוצים שהבקשות שלהם יישלמו מיד, אחרת אתה סובל מסיכון שלאובדןם. בדף האינטרנט הגדול ההטענה, אפילו אם המשתמש מתכוון להשהות את ההטענה הראשונית, כל הטענה ארוכה נוספת תפחית באופן אקספוננציאלי את רצונם להישאר או לבוא שוב.
- קבלת תביעות מולקולה: זה מתייחס לעיבוד מספר תביעות הגיעות בו-זמנית. שיהיו יותר מדי אנשים מנסים לבקר את האתר שלך בו-זמנית נראה כמשהו טוב, אבל זה נהיה בעיה אמיתית כשזמן ההטענה מאט והשרת שלך כולו יקרס. לשרת הפיזי או הוירטואלי שלך יש רק מיספור משאבים כמו RAM וכוח המעבדה של המעבדה, ושרתי האינטרנט חייבים להשתמש בהם באופן יעיל.
- התאמה: התאמה מתייחסת להגדלת החוזק של השרתים הקיימים שלך דרך התאמה אנכית או להוספת עוד שרתים להקמה שלך דרך התאמה אופקית. כשאתה מגדיל את הקהל שלך, אולי תגיע לנקודה שבה אתה צריך יותר מאחד או שני שרתי אינטרנט קטנים.
- קלות ההקמה: ההקמה מהירה של פרוייקט הוא המפתח להגירה של הפרוייקט שלך. תהליך ההקמה ישר ושובב הוא חשוב לשרת האינטרנט הראשון שאתה מקים, ולשרתי האינטרנט הנוספים כשאתה מתגבר.
- ת
- תמיכת מפתחים: אם המפתחים העיקריים לא מחוייבים לפרוייקט שלהם, לא צריך להתחייב לפרוייקט שלהם. זה כולל תמיכה לטווח ארוך לתוכנה שלהם, וכן תמיכה מיידית לטווח קצר בצורת תיקוני באגים ותיקונים.
- תמיכת קהילה: צוות פיתוח עיקרי יתמוך ברוב העבודה הכבדה, אבל קהילה פורחת תתרום למלא את החללים. במיזמים קוד פתוח, זה יכול להכיל תרומות לבסיס הקוד הממשי, אבל קהילה חזקה תגיב גם על שאלותיך ותעזור בבעיותייך הספציפיות.
בעוד ששרתי האינטרנט יכולים להציע פתרונות שונים, הפתרונות שהם מציעים נובעים מנסיונות להתמודד עם אותן בעיות. הבעיות האלו עצמן מתפתחות במשך הזמן יחד עם הצרכים והציפיות של המשתמש הסופי, מה שהופך את זה לרשימה חיה ומתפתחת כל הזמן.
בחירת פתרון שרת רשת
השרתים הפתוחים הכי פופולריים בינתיים הם Apache ו-Nginx.
Apache הגיע ראשון, ונבנה בתקופה שבה היה נפוץ שמספר אתרי אינטרנט עם קובץ הגדרות יחידים ישנם על שרת רשת אחד. Nginx הגיע אחרי Apache, בתקופה שבה הצרכים החלו להסתובב משרתי מרובי אתרים משרת אחד, ובמקום זה לשרת אתר אחד משרת אחד באופן מאוד יעיל תחת עומס.
שרתי האינטרנט חולקים את אותן מטרות ובעיות, אך תפיסת הפתרון ויישומו יהיו שונים בכל פתרון. התשובות המדויקות לבעיות אלו מעצבות את הזהות של כל פתרון שרת אינטרנט נתון. Nginx ו-Apache מודגשים כאן בגלל ייאוש הנפוץ שלהם, אך כל פתרון שרת אינטרנט יהיה מוטי. כשבוחרים שרת אינטרנט, חשוב לשמור על הצרכים שלך לגבי הפרוייקט המסוים שלך. כך שאפילו אם מתחיל להשתנות הנוף של ההצעות של שרתי האינטרנט, השיטה שלך להערכה תישאר קשורה לדרישות שלך.
הנה כמה אבחנות מפתח באופן שבו שרתי האינטרנט מנסים להשלים את מטרות שרת האינטרנט:
מבנה קבצי ההגדרות
שרתי האינטרנט שומרים על ההגדרות שלהם בקבצי הגדרות. ניתן להתאים את שרתי האינטרנט שלך על ידי עריכת הקבצים האלו. האיחסון והארגון של קבצי ההגדרות הוא עניין מוטי ומבני שמחלק את מוצרי שרת האינטרנט.
החלוקה העיקרית היא בין מרכזנות לחלוסה. קבצי תצורה מחולקים מאפשרים רמת שליטה גרעינית ברמת מערכת הקבצים, שנובעת מצורך לאחסון מספר אתרים רבים על שרת אחד. תצורות מרוכזות אינן מתמקדות באחסון מספר אתרים רבים על שרת אחד, אלא מתמקדות בשרות יעיל של אתר בודד. התצורות האלו תלויות בהתאמת דפוסי URI, שהיא התאמה של כתובות URL לשמות קבצים וסוגיות ייחודיות אחרות, במקום התלות בהתאמה למבנה התיקייה של שרת האינטרנט.
קבצי .htaccess
של Apache מאפשרים תצורה מחולקת כתכונה, וכל החלטת עיצוב מגיעה מהתמקדות הזו במערכת הקבצים עם רמת שליטה גרעינית. Nginx אינו מתמקד במערכת הקבצים כך, אלא מתמקד בהתאמת דפוסי URI ובתצורה מרוכזת.
ניהול התנגדות
שרתי האינטרנט שאתם מפעילים על שרתים פיזיים או וירטואליים יש משאבים מוגבלים כמו זכרון RAM ועיבוד מוח CPU. הדרך בה שרת האינטרנט שלכם מנהל באופן בסיסי את הבקשות שלו תהיה ההשפעה הגדולה ביותר על שימוש יעיל במשאבים שלכם. בקשה בודדת יכולה ליצור תהליך שלם עבור בקשה אחת, או שיכול להיות מטופלת על בסיס אירועים. היכולת של שרת האינטרנט שלכם להתמודד עם מספר בקשות סימולטניות באופן יעיל קשורה להחלטות עיצוב בסיסיות.
Apache מטפל בבקשות על ידי הפיכת תהליכים, שצורך משאבים בקצב שיכול להפוך לבעיה תחת עומס. מערכת העיבוד המבוססת על אירועים של Nginx משתמשת בפחות משאבים ויכולה להיות יותר יעילה תחת עומס.
שרות תוכן סטטי
בנוסף לדפי האינטרנט, שרתי האינטרנט מקבלים בקשות למשאבים אחרים כמו תמונות, סרטונים, קבצי CSS וקבצי JavaScript. מכיוון שאלו החפצים תמיד זהים ללא קשר למי שמבקש אותם, סוג זה של תוכן מכונה סטטי. לעיתים קרובות דף האינטרנט עצמו הוא רק קובץ HTML שלא מותאם לאדם שביקש אותו, וגם הוא יכול להיחשב תוכן סטטי. שרתי האינטרנט יכולים גם לכווץ את התוכן הסטטי זה לשם עליית זמן טובה יותר.
Nginx מצטיין בשרות תוכן סטטי בגלל מערכת עיבוד הבקשות המבוססת על אירועים שלו. Apache יכול גם לשרת תוכן סטטי, אך ברוב ההקמות, לא באותה מהירות ויעילות תחת עומס כמו Nginx.
שרות תוכן דינאמי
y
כאשר התוכן משתנה, מעובד ומותאם בהתאם למי שמבקש אותו, התוכן נקרא דינאמי. לדוגמה, אחרי שאתה מתחבר לאתר, האתר לעיתים קרובות יציג באופן דינאמי את שם המשתמש שלך בסרגל הניווט העליון. תוכן דינאמי יוסיף מורכבות נוספת כיוון שהוא מחייב את שרת הרשת להתמודד עם הרבה בקשות באופן יחודי בזמן שהוא מקבל אותן. תוכן שהותאם לכל בקשה לא יכול להיות משורר לכולם, ולא יכול להינצל באופן אוניברסלי.
עיבוד תוכן דינאמי בפנים מסיר שכבה נוספת של הסתרה שהיתה דורשת להעביר את הבקשה לספריה חיצונית. האפיפרקס יישם עיבוד תוכן דינאמי טבעית, עם ערימות פתרון פופולריות כמו LAMP (Linux, Apache, MySQL, PHP). Nginx יותר אגנוסטי לשפות אבל דורש ספריות חיצוניות כמו PHP-FPM כדי להיות פתרון דומה לשימוש במקרים כמו ערימת LAMP.
יכולת פרוקסי הפוך
שרת פרוקסי הפוכה יושב מול שרת רשת מסורתי, והופך לשרת ביניים שמסיר את תנועת הבקשות HTTP לשרתי הרשת המאחוריו. שרת הפרוקסי ההפוכה הופך לשער שמסיר תנועת תקשורת בין שרתי הרשת והאינטרנט ברחביו, ולעיתים הוא השכבה שמתמזגת ישירות עם חומה רשת. בעוד שרתי הרשת ברובם יש יכולת של פרוקסי ההפוכה, נגינקס בנוי ומועיל מהכם על מנת להיות שרת פרוקסי ההפוכה החזקה.
חשיבות נגינקס בשימוש האמיתי תלוייה במשתנים וביעילות של תכונות הפרוקסי ההפוכה שלו. הרבה הקמות שרתים מסורתיים מציבות מספר שרתי רשת מאחורי פרוקסי ההפוכה של נגינקס, ומשתמשים בנגינקס כדי לקבוע איזה שרת רשת לשלוח את הבקשה לו בהתבסס על העומס או על תצורת החוקים. התפקיד הביניים הזה מאפשר לו אפילו להתמזג עם אפאצ'י בחלק מההקמות, ולישות כפרוקסי ההפוכה מול שרת הרשת המסורתי של אפאצ'י.
מערכת התמיכה
לנגינקס ולאפאצ'י יש תמיכה חזקה מהצוותים המפתחים שלהם ומהקהילות. בהיותם שרתי הרשת הפתוחים הכי פופולריים, משאבי הלמידה רבים. אפאצ'י נתמך על ידי אפאצ'י, ארגון ללא מטרות רווח, והוא תמיד יהיה חינם לשימוש. הליבה של נגינקס היא פתוחה לכל, אבל התכונות הרצויות סגורות מאח
אלטרנטיבות לשרת האינטרנט המסורתי
אם אתה רוצה שרואיינט שמוכן בכל זמן להגיב לבקשת HTTP נכנסת, אז שרת אינטרנט מספק את המשימה הזו באופן הטוב ביותר. ככל שאתה נע רחוק יותר מהמיקוד על השרות של בקשות HTTP, שרתים האינטרנט יהפכו לפתרון פחות אידיאלי. זה נכון במיוחד לתכונות הבديות ששרתי האינטרנט מספקים. לדוגמה, תכונות כמו מטמון יכולות להיות מטופלות יותר יעילות ברמת ההפוך המתווך או CDN, תלוי בהקשר המסויים.
בנוסף, כשמפתחים שינוו את העדיפויות שלהם בהקדמת משאבי פיתוח לניהול שרתי אינטרנט, פתרונות כמו סרברלס, CMS ללא ראש (headless CMS), ו-Jamstack הופיעו בתגובה. הפתרונות האלו לא דורשים שרת אינטרנט ממוחזר עצמאית, אלא מופשטים את שכבת שרת האינטרנט לשרותים חיצוניים. עבור מפתחים שלא דורשים שליטה גרעינית או מתקדמת על שכבת שרת האינטרנט, זמן הפיתוח יכול להיות ממוקד אל מטה. למידע נוסף, פנה למאמר זה על Jamstack עם CMS ללא ראש או אפילו יישום גלי בעל כל השכבות עם פלטפורמת App של DigitalOcean.
סיכום
במאמר זה, עברת על הדרך על מהם שרתי רשת, איך הם משמשים ואילו בעיות הם מנסים לפתור. עם הידע הזה, צללת לתוך הנוף הנוכחי של פתרונות שרתי רשת והשתמשת בידע שלך כדי למצוא את הפתרון שמתאים לדריך שלך במיוחד. ללמוד יותר על איך להקים ולהשתמש בשרת רשת, פנה לשאר סדרות הקורסום העליוני שלנו על שרתי רשת.
משאבים נוספים
הדרכות:
- איך להתקין אפחי: הוראות שלב אחר שלב עבור הקמת שרת האפחי הראשון שלך. הפתרון הזה מצטיין בהגדרה מבוזרת לשליטה פירוטית, והתמכות פנימית בדפי רשת דינמיים עם חוגיות לשפות תכנות פופולאריות כמו PHP.
- איך להתקין אנג'יקס: הוראות שלב אחר שלב עבור הקמת שרת האנג'יקס הראשון שלך. הפתרון הזה מצטיין בהגדרה מרכזית, שרות נכסים סטטיים, תפקיד כמשבר חזרה, והתמודדות עם תנועה גבוהה במהירות.
- Apache נגד Nginx: סיבוכים מעשיים: מבט עמוק יותר בשני השחקנים המובילים בשדה הפתרונות לשרתי האינטרנט.
מוצרים של DigitalOcean:
- Droplets של DigitalOcean: שרתים פרטיים וירטואליים לבדיקה והפלטה של שרתי רשת.
- פונקציות של DigitalOcean: פתרון ללא שרת שיכול להיות אלטרנטיבה לשרתים פרטיים וירטואליים. דלג על תחזוקת השרתים, תמיד על קוד היישום שלך.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction