خوادم Apache مقابل Nginx: المعلومات الداخلية على هذين النوعين من الخوادم

نشرت: 2022-01-03

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

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

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

ما هي Apache و Nginx

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

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

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

رسم بياني لمؤشرات Google يعرض Apache مقابل Nginx.

التسمية التوضيحية: يمثل السطر الأزرق الموجود هنا من Google Trends عمليات البحث عن Apache منذ عام 2004 ، بينما يشير الخط الأحمر إلى Nginx.

بالنسبة لما يجلبه Apache و Nginx إلى الطاولة ، فقد يملأ هذا العديد من الكتب حول هذا الموضوع. ومع ذلك ، سنحاول القيام بذلك بأقل من 2000 كلمة - بدءًا من مجموعة الميزات العامة لكليهما.

الميزات العامة لـ Apache و Nginx

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

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

في بقية هذه المقالة ، سنعرض لك هذا من خلال تفصيل التفاصيل الفنية لـ Apache و Nginx. هذا ما سنقوم بتغطيته:

  • تحليل تقني لكل نوع من أنواع برامج الخادم ، بما في ذلك معالجة الطلب والاتصال وتقنيات التخزين المؤقت والمزيد.
  • تكوين وتوسيع Apache ، بما في ذلك تفاصيل حول ملف .htaccess النمطية.
  • كيف تقوم بتكوين Nginx وقابليته للتوسع.

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

الاختلافات التقنية بين Apache و Nginx

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

  1. يستخدم Apache بنية "مدفوعة بالعملية" ، بينما يستخدم Nginx بنية "مدفوعة بالحدث".
  2. بينما كلا النوعين من الملفات الثابتة للخادم (وإن كان ذلك بطريقة مختلفة) ، لا يقوم Nginx بخادم المحتوى الديناميكي.
  3. يفسر كل نوع برنامج طلبات HTTP بطريقة جوهرية مختلفة.

سنلقي نظرة على بعض هذه الجوانب ، بدءًا من اعتبارات التعامل مع الاتصال.

معالجة الاتصال

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

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

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

طلب ترجمة

يتبع كل من Apache و Nginx أيضًا طريقة مختلفة لتفسير الطلبات التي سيتلقاها الخادم. على سبيل المثال ، يستخدم Nginx معرّف الموارد المنتظم (URI) لطلب لترجمته إلى عنصر مادي في نظام الملفات.

يمكنك رؤية هذا بتنسيق بعض كتل التكوين ، مثل server location . إنهم يعملون معًا لتحليل URI وتحويله إلى شيء داخل نظام الملفات.

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

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

ثابت مقابل الأداء الديناميكي

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

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

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

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

نموذج التكوين الموزع الخاص بـ Apache

لن يكون من المفاجئ أن يكون لكل من Apache و Nginx نهج مختلف لتكوين الخادم الخاص بهما. باختصار ، يعتمد تكوين Apache مقابل Nginx على ما إذا كان يمكنك القيام بذلك على مستوى الدليل.

يستخدم Apache نموذجًا موزعًا ، مما يعني أنه يمكنك تكوين الخادم على أساس كل دليل. ستفعل ذلك من خلال ملفات .htaccess . سيتحقق Apache من كل مكون من مسار الملف المطلوب بحثًا عن ملف .htaccess ، وتنفيذ التوجيهات بالداخل.

ملف htaccess يعرض وحدة mod_rewrite مع بعض قواعد إعادة الكتابة.

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

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

وحدات اباتشي

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

يمكن أن تغطي هذه الوحدات الكثير من المساحات ، وهناك الكثير منها متاح. يمكن للوحدات النمطية مثل mod_php تغيير الوظائف الأساسية للخادم ، بينما يتيح لك mod_rewrite تنفيذ العديد من المهام الأخرى:

  • تقييد عناوين IP.
  • تغيير المجلد الرئيسي لموقعك.
  • تنفيذ عمليات إعادة التوجيه 301.
  • تعيين الصفحة الرئيسية الافتراضية.

بين .htaccess ونظام الوحدات الديناميكية ، يمثل Apache طريقة واضحة لمعظم المستخدمين لتحسين خادم الويب والموقع وتحسينهما.

نموذج التكوين المركزي لـ Nginx

يتخذ Nginx مقاربة مركزية لتكوين الخادم. هذا يعني أن هناك ملف تكوين واحد (ينتهي .conf ). يصعب أحيانًا العثور عليه اعتمادًا على بنية الخادم الخاص بك.

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

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

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

وحدات Nginx

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

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

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

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

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

لماذا تستخدم إما Apache أو Nginx

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

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

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

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

ملخص

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

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

هل لديك رأي بشأن Apache و Nginx؟ شاركنا بأفكارك في قسم التعليقات أدناه!