مقدمة في خوادم الويب

المقدمة

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، تحديدًا الصفحة الرئيسية. في الأفضل، يحدث هذا بسرعة وبتوافر على مدار الساعة طوال أيام الأسبوع.

على الرغم من أن أي زائر إلى الصفحة الرئيسية لـ 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 وإعادة الكتابة.
  • يعالج ويخدم المحتوى الديناميكي.
  • يضغط المحتوى لتحسين استخدام البيانات والسرعة.
  • يمكّن من حفظ التخزين المؤقت في المتصفح لمحتواك الثابت.

من الناحية العملية، إليك بعض المشاريع الشخصية التي قد تنطوي على خادم ويب:

  • ترغب في إنشاء موقع على الويب.
  • ترغب في إنشاء تطبيق يتصل بالإنترنت.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

معالجة التنافر

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

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

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

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

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

تقديم المحتوى الديناميكي

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

تجري معالجة المحتوى الديناميكي داخليًا تصحيحًا إضافيًا للتجريد الذي قد يتطلب عادةً تسليم الطلب إلى مكتبة خارجية. ينفذ Apache بشكل أصلي معالجة المحتوى الديناميكي، مع حزم الحلول الشائعة مثل LAMP (Linux، Apache، MySQL، PHP). 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، ستصبح خوادم الويب أقل حلاً مثاليًا. وهذا ينطبق بشكل خاص على الميزات الإضافية التي توفرها خوادم الويب. على سبيل المثال، قد يتم التعامل بكفاءة أكبر مع ميزات مثل التخزين المؤقت على مستوى الوكيل العكسي أو شبكة توزيع المحتوى، اعتمادًا على الإعداد.

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

الختام

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

موارد إضافية

البرامج التعليمية:

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

منتجات DigitalOcean:

  • القطرات في DigitalOcean: خوادم افتراضية خاصة بك لاختبار ونشر خوادم الويب.
  • وظائف DigitalOcean: حلاً خادميًا لا يتطلب خادمًا افتراضيًا خاصًا. تخطَّى صيانة الخوادم، وركز على كود تطبيقك.

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