مكتبة الشروحات

تكوين وتحسين خادم الويب Nginx و Apache

Nginx (ينطق "إينجن-إكس") هو خادم ويب خفيف الوزن وعالي الأداء وخادم وكيل عكسي. تم إنشاؤه في الأصل كحل لمشكلة C10K (التعامل مع 10,000 اتصال متزامن) ومنذ ذلك الحين أصبح أحد أكثر خوادم الويب شعبية في العالم. تم تصميم Nginx لخدمة المحتوى الثابت بسرعة وكفاءة وهو يُستخدم على نطاق واسع كوكيل عكسي، موازن تحميل، وذاكرة تخزين مؤقتة لـ HTTP.

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

تثبيت Nginx و Apache تثبيت Nginx: على أنظمة Ubuntu أو Debian، يمكنك تثبيت Nginx باستخدام الأوامر التالية:

sudo apt update
sudo apt install nginx

على أنظمة CentOS أو RHEL:

sudo yum install epel-release
sudo yum install nginx

بعد التثبيت، يمكنك بدء وتمكين Nginx باستخدام:

sudo systemctl start nginx
sudo systemctl enable nginx

تثبيت Apache: على أنظمة Ubuntu أو Debian:

sudo apt update
sudo apt install apache2

على أنظمة CentOS أو RHEL:

sudo yum install httpd

بعد التثبيت، قم ببدء وتمكين Apache:

sudo systemctl start apache2  # بالنسبة لـ Ubuntu/Debian
sudo systemctl enable apache2

sudo systemctl start httpd  # بالنسبة لـ CentOS/RHEL
sudo systemctl enable httpd

التكوين الأساسي لـ Nginx ملفات التكوين: عادة ما توجد ملفات التكوين لـ Nginx في /etc/nginx/nginx.conf. هنا يتم إجراء معظم إعدادات الخادم العالمية. التكوين هرمي، وكل كتلة (خادم، موقع) لها سياق محدد.

المضيفات الافتراضية في Nginx: لا يستخدم Nginx التوجيه VirtualHost مثل Apache، بل يستخدم كتل الخوادم لتعريف كل مضيف افتراضي. قد يبدو التكوين الأساسي لمضيف افتراضي في Nginx كما يلي:

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

يستمع هذا التكوين لطلبات HTTP على المنفذ 80 للنطاق example.com، ويخدم المحتوى من /var/www/example.com/html، ويحدد الملف الافتراضي ليكون index.html.

التوجيهات الشائعة:

  • listen: يحدد عنوان الـ IP والمنفذ الذي يجب على الخادم الاستماع عليه.
  • server_name: يعرف النطاق أو عنوان الـ IP الذي يجب أن يستجيب له الخادم.
  • root: يحدد المجلد الجذر حيث يتم تخزين المحتوى.
  • index: يحدد الملف الافتراضي الذي يتم خدمته عند الوصول إلى مجلد.

التكوين الأساسي لـ Apache ملفات التكوين: ملف التكوين الرئيسي لـ Apache يوجد في /etc/httpd/httpd.conf أو /etc/apache2/apache2.conf، حسب التوزيعة. بالإضافة إلى ذلك، غالبًا ما يتم تخزين تكوينات المضيف الافتراضي في /etc/apache2/sites-available/.

المضيفات الافتراضية في Apache: يستخدم Apache التوجيه VirtualHost لتكوين عدة مواقع على نفس الخادم. إليك مثالاً:

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/example.com/html
    ServerName example.com

    <Directory /var/www/example.com/html>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

يستمع هذا التكوين على المنفذ 80 للطلبات إلى example.com، ويخدم الملفات من /var/www/example.com/html، ويوفر تكوينات سجلات الأخطاء والوصول.

التوجيهات الشائعة:

  • DocumentRoot: يحدد المجلد الذي توجد فيه ملفات الموقع.
  • ServerName: يعرف النطاق أو عنوان الـ IP الذي يستجيب له المضيف الافتراضي.
  • ErrorLog: يحدد موقع سجل الأخطاء.
  • CustomLog: يحدد موقع سجل الوصول.

تحسين Nginx ضبط عمليات العامل: تم تصميم Nginx ليكون فعالًا للغاية في التعامل مع العديد من الاتصالات المتزامنة. يمكنك تحسينه عن طريق تكوين عدد عمليات العامل:

worker_processes auto;
worker_connections 1024;

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

ضغط Gzip: تمكين ضغط Gzip يقلل من حجم المحتوى المرسل إلى العملاء، مما يسرع وقت تحميل الصفحات. في Nginx، يمكن القيام بذلك بإضافة ما يلي إلى الكتلة http:

gzip on;
gzip_types text/plain text/css application/javascript;
gzip_comp_level 6;

التخزين المؤقت: يوفر Nginx آليات التخزين المؤقت التي يمكن أن تقلل من الحمل على الخادم عن طريق تخزين المحتوى المطلوب بشكل متكرر. إليك مثال على تكوين التخزين المؤقت البسيط:

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 1h;
    proxy_cache_use_stale error timeout updating;
}

تحسين Apache ضبط MPM (وحدة المعالجة متعددة العمليات): يستخدم Apache وحدات MPM مختلفة لمعالجة الطلبات الواردة. من المهم اختيار MPM المناسب وتكوينه لتحقيق أفضل أداء. أكثر وحدات MPM استخدامًا هما mpm_event و mpm_worker.

على سبيل المثال، مع وحدة mpm_event:

<IfModule mpm_event_module>
    StartServers            2
    MinSpareThreads        25
    MaxSpareThreads       75
    ThreadLimit           64
    ThreadsPerChild       25
    MaxRequestWorkers    150
    MaxConnectionsPerChild   0
</IfModule>

تمكين ضغط Gzip: تمامًا مثل Nginx، يمكنك تمكين ضغط Gzip في Apache عن طريق إضافة ما يلي إلى التكوين:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>

التخزين المؤقت: يمكن لـ Apache تخزين المحتوى باستخدام وحدات مثل mod_cache و mod_cache_disk. إليك مثالًا على تمكين التخزين المؤقت عبر القرص:

<IfModule mod_cache.c>
    CacheRoot /var/cache/apache2/mod_cache
    CacheEnable disk /
</IfModule>

أفضل الممارسات الأمنية لـ Nginx

  • تحديد حجم الطلب: منع الطلبات الكبيرة من تحميل الخادم عن طريق تحديد حجم الطلب.
client_max_body_size 10M;
  • تعطيل الوحدات غير المستخدمة: تعطيل أي وحدات لا تحتاجها لتقليل مساحة الهجوم.

  • تكوين SSL: دائمًا قدم موقعك عبر HTTPS. استخدم تكوينات SSL قوية وشهادات Let's Encrypt.

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:...';

أفضل الممارسات الأمنية لـ Apache

  • تعطيل عرض الدلائل: منع المستخدمين من عرض قوائم الدلائل.
Options -Indexes
  • تعطيل الوحدات غير المستخدمة: يأتي Apache مع العديد من الوحدات التي قد لا تكون ضرورية. قم بتعطيل الوحدات غير المستخدمة لتقليل الثغرات.

  • تكوين SSL: مثل Nginx، تأكد من تكوين SSL بشكل صحيح:

SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key

مقارنة بين Nginx و Apache

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

  • التكوين: يحتوي Nginx على تكوين أكثر اختصارًا وأقل تعقيدًا، بينما Apache أكثر مرونة وله نظام بيئي أكبر من الوحدات.

  • استخدام الموارد: Nginx عمومًا أكثر كفاءة من حيث استخدام الذاكرة وCPU، خاصةً تحت الأحمال الثقيلة.

  • دعم المجتمع: كلا من Nginx و Apache لديهما دعم قوي من المجتمع، ولكن Apache له سجل أطول.

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

  • 0 أعضاء وجدوا هذه المقالة مفيدة
هل كانت المقالة مفيدة ؟