تقديم للمستودعات الويب

مقدمة

الدور الرئيسي لخادم الويب هو خدمة الصفحات الويب لموقع إنترنت. يمكن تقديم صفحة ويب من ملف HTML واحد، أو مجموعة معقدة من الموارد المختلطة معًا. إذا كنت تريد استضافة تطبيقك الويب على الإنترنت، ففي العديد من الحالات ستحتاج إلى خادم ويب.

أحد أكثر حالات استخدام خادم الويب تشغيل الملفات الضرورية لتقديم موقع ويب في متصفح الويب. عندما تزور http://www.digitalocean.com، تبدأ بإدخال عنوان URL يبدأ طلبًا عبر الإنترنت. هذا الطلب يمر من خلال عدة طبقات، واحدة أو أكثر، منها سيكون خادم ويب. يقوم هذا الخادم بإنشاء استجابة لطلبك، والتي في هذه الحالة هي موقع DigitalOcean، وبالتحديد الصفحة الرئيسية. يجب أن يحدث ذلك بسرعة ومع وجود متاح 24/7.

بينما سيتجربه أي زائر لصفحة الرئيسية لـ DigitalOcean كصفحة ويب واحدة، فإن الحقيقة هي أن معظم الصفحات الويب الحديثة اليوم تتكون من مجموعة كبيرة من الموارد. تعمل خوادم الويب كوسيط بين الخلفية والأمامية، تقديم موارد مثل ملفات HTML وCSS إلى بيانات JSON، كلها تتم إنشاؤها بشكل ديناميكي على الفور أو تُقدم بشكل ساكن. إذا كنت تخطط للعمل مع المواقع أو التطبيقات الإنترنتية بأي شكل من الأشكال، فمن المفيد جدًا تأكد من معرفة الأساسيات لما هو خادم الويب، وكيف يعمل.

المصطلح “خادم الويب” يمكن أن يشير إلى إما البرمجيات نفسها أو الأجهزة التي توجد عليها، ولكن هذا المقال يشير بشكل خاص إلى برمجيات خادم الويب. لمزيد من التفاصيل حول هذا الفرق، اقرأ تعريفنا عن خادمات السحابة.

استخدامات شائعة

يتعامل خادم الويب مع الطلبات على الإنترنت من خلال بروتوكول HTTP وHTTPS، ويطلق عليه أيضًا خادم HTTP. يختلف خادم الويب عن أنواع أخرى من الخوادم بأنه يتخصص في التعامل مع هذه الطلبات HTTP وHTTPS، مما يميزه عن خوادم التطبيقات (مثل Gunicorn) وخوادم البروتوكولات الأخرى (مثل WSGI). تعمل هذه الخوادم الأخرى كوسائل بينية للغات البرمجة الخلفية من خلال مكتبات خارجية، وهو مستوى تجريد مختلف عن خوادم الويب.

إليك بعض المهام الشائعة التي تتعامل معها خوادم الويب:

  • خدمة ملفات HTML وCSS وJavaScript.
  • خدمة الصور والفيديوهات.
  • التعامل مع رسائل الخطأ HTTP.
  • التعامل مع طلبات المستخدمين، غالبًا ما يكونوا متوازية.
  • توجيه تطابق URL وإعادة كتابتها.
  • معالجة وخدمة المحتوى الديناميكي.
  • ضغط المحتوى لتحسين استخدام البيانات والسرعة.
  • تمكين التخزين المؤقت لمحتوىك الثابت.

في معايير عملية، هذه بعض المشاريع الشخصية التي تتضمن خوادم الويب:

  • أنت تريد أن تخترع موقع ويب.
  • أنت تريد أن تصمم تطبيقًا يتصل بالإنترنت.

هذه القائمة ليست بمعنى شامل ولا يتم بشكل قاطع إحداثي تحديد النوعيات التي يمكن تقديمها خوادم الويب للمستخدمين. على سبيل المثال، يتم في الواقع إستبدال خوادم الويب التي تقوم بمعالجة طلبات API الويب بتقديم البيانات بتقاليد مثل الJSON.

أهداف خوادم الويب

توجد خوادم الويب لتوجه إلى جمهور يتوقع سرعة وتوافر ومواصلة والمزيد. تشارك غرضًا مشتركًا في تقديم المحتويات على الإنترنت ولكي يعتبر ذلك حلًا جيدًا لخوادم الويب يجب أن يتم اختبار أعمال المواضيع التالية:

  • الانتقال: يدفع إلى وقت الخوادم الويب العلنية والفعالة. يتوجب أن يكون الموقعات متوفرة في جميع الأوقات لخدمة المستخدمين لذلك يتم تحديد الوقت المتوفر عاليًا. يعني أيضًا إستقرار وقدرات توقع. عندما يدخل مستخدمًا عنوان URL أو ينقر على رابط لموقعك، يجب أن تتحمل صفحة المتوقعة في كل مرة وفي أي وقت. الاستثناءات يمكن أن تكون أوقات توقف مخططة للتحديثات أو الصيانة. تؤثر خوادم الويب التي تحطم بشكل عشوائي أو تختل بشكل مؤكد على تجربة المستخدمين.
  • السرعة: يجب أن تتحمل صفحاتك الإلكترونية بأسرع سرعة ممكنة. يريد المستخدمون أن يتمكن من تلبية طلباتهم فورًا، وإلا فأنت تخاطر بفقدانهم. في صفحة الويب التي تتحمل ببطء، حتى لو استمر المستخدم في الانتظار عند التحميل الأولي، سيقلل كل تحميل طويل ثابتًا ترغبهم في البقاء أو الزيارة مرة أخرى.
  • التزامن: يشير هذا إلى التعامل مع عدة طلبات تأتي في نفس الوقت. يبدو أن يكون العديد من الأشخاص يحاولون زيارة موقعك الإلكتروني في نفس الوقت شيئًا جيدًا، لكن يصبح هذا مشكلة حقيقية عندما تبطئ عملية التحميل إلى درجة لا تصدق وتنهار الخادم بالكامل. يتوفر للخادم الفيزيائي أو الافتراضي لديك موارد محدودة مثل الذاكرة العشوائية وقوة معالجة الرقمي، ويجب أن يستخدم خوادم الويب هذه الموارد بكفاءة.
  • القابلية للتوسع: تشير القابلية للتوسع إلى تعزيز قوة الخوادم الموجودة من خلال التوسع العمودي، أو إضافة المزيد من الخوادم إلى إعدادك من خلال التوسع الأفقي. بينما تنمو زوجدتك، قد تصل إلى نقطة تحتاج فيها أكثر من خادم ويب واحد أو اثنين صغيرين.
  • سهولة التثبيت: الوصول إلى مشروع وتشغيله بسرعة هو المفتاح لتكرار مشروعك. عملية تثبيت واضحة وقابلة للتكرار مهمة للخادم الويب الأول الذي تثبته، وكذلك الخوادم الويب المتعددة التي تثبتها عندما تقوم بالتوسع.
  • الوثائق: الخوادم الويب معقدة. التثبيتات الشائعة ستساعدك على البدء بسرعة، لكن احتياجاتك ستنمو مع الوقت. غالبًا ما تحتاج إلى ميزات ليست شائعة بما يكفي. عندما يأتي ذلك الوقت، تعتبر الوثائق الجيدة ضرورية لإنشاء حلول مخصصة تلبي اح
  • دعم المطورين: إذا لم تكن فريق المطورين الأساسيين ملتزمين بمشاريعهم الخاصة، فلا يجب عليك أن تكون ملتزمًا بمشروعك في مشاريعهم. يشمل ذلك خططًا للدعم الطويل الأجل لبرمجياتهم، بالإضافة إلى الدعم القصير الأجل الذي يقدمونه بشكل فوري في شكل إصلاح الأخطاء والرقعات.
  • دعم المجتمع: سيتولى فريق التطوير الأساسي معظم العمل الكبير، ولكن مجتمع ناشئ يساهم في ملء الفجوات. مع المشاريع المفتوحة المصدر، يمكن أن يعني ذلك المساهمة في قاعدة الشفرة الفعلية، ولكن مجتمع قوي سيقوم أيضًا بالإجابة على أسئلتك والمساعدة في مشاكلك الخاصة.

بينما يمكن للخوادم الإنترنتية تقديم حلول مختلفة، تنبع من محاولات لحل نفس المشاكل. تتطور هذه المشاكل نفسها مع الزمن مع احتياجات وتوقعات المستخدم النهائي، مما يجعلها قائمة حية ومتطورة دائمًا.

اختيار حلول خادم الويب

أكثر الخوادم الويب المفتوحة المصدر الشهرية حاليًا هي Apache و Nginx.

أتت Apache أولًا، وتم بناؤها في وقت كان شائعًا فيه أن يكون على الخادم الويب الواحد عدة مواقع مع ملفات التكوين الفردية لكل منها. أتى Nginx بعد Apache، في وقت كانت الحاجات قد انتقلت عن خدمة عدة مواقع من خادم واحد، وإلى خدمة موقع واحد من خادم واحد بشكل فعال تحت الحمل.

المزودون بالخدمات الإنترنتية يتشاركون نفس الأهداف والمشاكل، ولكن تفسير وتنفيذ كل حل سيختلف. التفاصيل الدقيقة لهذه المشاكل تشكل هوية أي حل موقع إنترنتي محدد. يتم التركيز على Nginx وApache هنا بسبب شيوعهما، ولكن أي حل لخدمة الويب سيكون له رأي. عند اختيار خادم ويب، من المهم الحفاظ على احتياجاتك الخاصة لمشروعك المحدد. بهذه الطريقة، حتى لو تغير مناظر عرض الخدمات الويبية، فإن طريقة تقييمك ستبقى مستوية بناءً على احتياجاتك الخاصة.

إليك بعض العوامل الرئيسية التي تختلف فيها الخدمات الويبية في محاولة تحقيق أهداف الخادم الويبي:

هيكل ملفات التكوين

تخزن خدمات الويب تحديداتها في ملفات التكوين. يمكنك تخصيص خدمات الويب الخاصة بك عن طريق تحرير هذه الملفات. تخزين وتنظيم ملفات التكوين هو قضية بنية ومتعلقة بالرأي تقسم منتجات خدمات الويب.

الفصل الرئيسي هو بين التموضع المركزي والتموضع اللامركزي. ملفات التكوين اللامركزية تتيح مستوى تفصيلي من التحكم على مستوى نظام الملفات، مما ينبع من الحاجة إلى استضافة عدة مواقع على خادم واحد. التكوينات المركزية لا تركز على استضافة عدة مواقع على خادم واحد، بل تركز على خدمة موقع واحد بكفاءة. هذه التكوينات تعتمد على تطابق نمط URI، وهو التطابق بين عناوين الرابطات بملفات ومعرفات فريدة أخرى، بدلاً من الاعتماد على التطابق مع هيكل المجلد لخادم الويب.

توفر ملفات Apache .htaccess تكوينًا لامركزيًا كوظيفة، وكل قرار تصميمي ينبع من هذا التركيز على نظام الملفات بمستوى تفصيلي من التحكم. لا يملك Nginx نفس التركيز على نظام الملفات، بل يركز على تطابق نمط URI وتكوين مركزي.

معالجة التزامن

للخوادم الخاصة والافتراضية التي تشغلها خوادم الويب لديها موارد محدودة مثل الذاكرة العشوائية ومعالجة المعالجة المركزية. كيفية إدارة طلبات الخادم الخاص بك بشكل أساسي ستكون لها أكبر تأثير على استخدام مواردك بكفاءة. يمكن أن ينشأ طلب واحد عملية بالكامل لكل طلب، أو يمكن التعامل معه على أساس أحداث محددة. قدرة خادم الويب الخاص بك على التعامل مع عدة طلبات متزامنة بكفاءة مرتبطة بالقرارات التصميمية الأساسية.

تتعامل أباتشي بالطلبات عن طريق توليد عمليات، مما يستهلك موارد بمعدل يمكن أن يصبح مشكلة تحت الحمل. يستخدم نظام نيجينكس القائم على الأحداث لمعالجة الأحداث والنظام أقل موارد ويمكن أن يكون أكثر أداءً تحت الحمل.

خدمة المحتوى الثابت

بالإضافة إلى صفحات الويب، تتلقى الخوادم الويبية طلبات لموارد أخرى مثل الصور، المقاطع الفيديو، ملفات CSS، وملفات JavaScript. حيث أن هذه العناصر دائمًا ما تكون نفسها بغض النظر عن من يطلبها، يتم اشارة هذا النوع من المحتوى بالمواد الثابتة. غالبًا ما تكون صفحة الويب نفسها ملف HTML ليس منخفضًا للشخص الذي يطلبها، وتُعتبر أيضًا محتوى ثابت. يمكن للخوادم أيضًا ضغط هذا المحتوى الثابت لتحسين وقت التحميل.

تتفوق نيجينكس في خدمة المحتوى الثابت بفضل معالجتها القائمة على الأحداث للطلبات. يمكن لأباتشي أيضًا خدمة المحتوى الثابت، ولكن في معظم الإعدادات، ليس بالمعدل نفس السرعة والكفاءة تحت الحمل مقارنة بنيجينكس.

خدمة المحتوى الديناميكي

عندما يتم تغيير المحتوى ومعالجته وتخصيصه اعتمادًا على الشخص الذي يطلبه، يُطلق على المحتوى اسم المحتوى الديناميكي. على سبيل المثال، بعد تسجيل دخولك إلى موقع ويب، غالبًا ما يقوم الموقع بتحديث اسم المستخدم الخاص بك بشكل ديناميكي في الشريط التنقلي العلوي. يضيف المحتوى الديناميكي تعقيد إضافي لأنه يجبر الخادم على التعامل مع العديد من الطلبات بشكل فردي عندما يتلقىها. المحتوى المخصص لكل طلب لا يمكن تقديمه للجميع، ولا يمكن مخزنه عالميًا.

يزيل معالجة المحتوى الديناميكي داخليًا طبقة إضافية من الاتخاذ الإجمالي التي تتطلب تسليم الطلب إلى مكتبة خارجية. ينفذ Apache معالجة المحتوى الديناميكي بشكل محلي، مع حزم الحلول الشائعة مثل LAMP (Linux، Apache، MySQL، PHP). يكون Nginx أكثر لغة الحرية ولكنه يتطلب مكتبات خارجية مثل PHP-FPM لتقديم حل مماثل للاستخدام في حالات مثل حزم LAMP.

قدرة التوجيه العكسي

الخادم المتموي الراكب يجلس أمام خادم ويب تقليدي، متحولًا إلى خادم وسيط يوجه ترافق HTTP للطلبات إلى الخوادم الويب الخلفية له. يصبح الخادم المتموي الراكب بوابة توجه الحركة بين الخوادم الويب والإنترنت بشكل عام، وغالبًا ما يكون الطبقة التي تتفاعل مباشرة مع جدار الحماية. بينما يتمتع معظم الخوادم الويب بقدرة خاصة بالخادم المتموي الراكب، تم بناء Nginx وتحسينه من الأساس ليكون خادمًا متمويًا راكبًا قويًا.

أهمية Nginx في الاستخدام العالمي الحقيقي تعتمد بشكل كبير على ميزاته الخاصة بالخادم المتموي الراكب وكفاءته. يمثل العديد من إعدادات الخادم وضع عدة خوادم ويب تقليدية خلف Nginx المتموي الراكب، مستخدمًا Nginx لتحديد أي خادم ويب يتم إرسال الطلب إليه بناءً على الحمل أو تكوين القاعدة. يتيح هذا الدور الوسيط أن يتشارك مع Apache في بعض الإعدادات، مركزًا كخادم متموي راكب أمام خادم ويب Apache التقليدي.

النظام الداعم

يتمتع كلا Nginx وApache بدعم قوي من فرقهما المطورة والمجتمع على حد سواء. كلاهما من أشهر خوادم ويب المفتوحة المصدر، والموارد التعليمية غنية. يدعم Apache من قبل منظمة Apache، المنظمة غير الربحية، وسيظل مجانيًا للإستخدام دائمًا. يكون جوهر Nginx مفتوح المصدر، ولكن الميزات المرغوب فيها محبوسة خلف منتج Nginx Plus والذي يتضمن ميزات مثل فحوصات صحة الجيران، الاستمرارية الجلسة، والمراقبة المتقدمة.

بديلات لخادم الويب التقليدي

إذا كنت تريد خادمًا جاهزًا في كل وقت للرد على طلب HTTP الوافر، فإن خادم الويب هو الحل الأمثل لهذه المهمة. كلما تبتعدت أكثر عن التركيز على خدمة طلبات HTTP، سيصبح خادمو الويب أقل مثالية. هذا يعود للوظائف الإضافية التي توفرها خادمو الويب. على سبيل المثال، قد تكون ميزات مثل التخزين المؤقت أكثر كفاءة في التعامل في مستوى الواجهة العكسية أو CDN، اعتمادًا على التكوين.

بالإضافة إلى ذلك، بما أن المطورين قد انتقلوا أولوياتهم في تخصيص موارد التطوير لإدارة خادمو الويب، ظهرت حلول مثل الخادم بلا عمود، واعدادات محتوى الويب بلا رأس (headless CMS)، وJamstack. هذه الحلول لا تتطلب خادمًا ويبًا مضافًا بنفسك، بل تجرد طبقة خادم الويب إلى خدمات خارجية. بالنسبة للمطورين الذين لا يحتاجون للتحكم الدقيق أو المتقدم في طبقة خادم الويب، يمكن تركيز وقت التطوير في مجالات أخرى. للمزيد، تفقد المقال التالي حول Jamstack مع واعدادات محتوى الويب بلا رأس أو تنفيذ Jamstack الكامل مع منصة التطبيقات لـ DigitalOcean.

الخاتمة

في هذا المقال، قمت بتجربة نظرة أساسية على ما هي خوادم الويب، وكيفية استخدامها، والمشاكل التي تحاول حلها. مجهز بهذه المعرفة، اندفعت إلى المشهد الحالي لحلول خوادم الويب، وطبقت معرفتك لإيجاد الحل الذي يناسب احتياجاتك بشكل محدد. لمعرفة المزيد حول كيفية إعداد واستخدام خادم ويب، انظر إلى باقي سلسلةنا الدراسية على السحابة حول خوادم الويب.

مصادر إضافية

الدروس:

  • كيفية تثبيت Apache: تعليمات خطوة بخطوة لإعداد أول خادم Apache الخاص بك. هذا الحل يتمتع بتفوق في التكوين اللامركزي للتحكم الدقيق، ومعالجة الصفحات الويب الديناميكية الداخلية مع الربط باللغات البرمجية الشائعة مثل PHP.
  • كيفية تثبيت Nginx: تعليمات خطوة بخطوة لإعداد أول خادم Nginx الخاص بك. هذا الحل يتمتع بتفوق في التكوين المركزي، وخدمة الأصول الثابتة، والتعمل كواجهة مراجعة معكوسة، ومعالجة الحركة المتكررة العالية.
  • Apache مقابل Nginx: الاعتبارات العملية: نظرة أعمق في العملاء الرئيسيين في بيئة حلول خدمات الويب.

منتجات DigitalOcean:

  • DigitalOcean Droplets: خواديم الويب الخاصة الافتراضية لاختبار وتوزيع خدمات الويب.
  • DigitalOcean Functions: حل بلا خادم يمكن أن يكون بديلاً لخواديم الويب الخاصة. تخطي الصيانة للخوادم، وركز على كود التطبيق الخاص بك.

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