إعداد وإدارة خدمات الويب مع Apache وNginx على لينكس

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


1. مقدمة

  • Apache: يُعرف بمرونته ودعمه الواسع للوحدات الإضافية (Modules)، مما يجعله خيارًا مثاليًا لتطبيقات الويب المعقدة.
  • Nginx: يتميز بأداءه العالي وكفاءته في التعامل مع عدد كبير من الاتصالات المتزامنة، مما يجعله مناسبًا للخدمات ذات الزيارات العالية.

2. تثبيت Apache على توزيعة Ubuntu

أ. تحديث النظام

قبل تثبيت أي حزمة، من المهم تحديث قائمة الحزم:

bash
sudo apt update
sudo apt upgrade -y

ب. تثبيت Apache

bash
sudo apt install apache2 -y

ج. التحقق من تثبيت Apache

بعد التثبيت، تحقق من أن Apache يعمل بشكل صحيح:

bash
sudo systemctl status apache2

يمكنك أيضًا فتح متصفح الويب والانتقال إلى http://your_server_ip لترى صفحة الترحيب الافتراضية لـ Apache.


3. إعداد Apache

أ. إدارة الخدمات

  • بدء الخدمة:
    bash
    sudo systemctl start apache2
  • إيقاف الخدمة:
    bash
    sudo systemctl stop apache2
  • تمكين الخدمة عند الإقلاع:
    bash
    sudo systemctl enable apache2
  • تعطيل الخدمة عند الإقلاع:
    bash
    sudo systemctl disable apache2

ب. إعداد المضيف الافتراضي (Virtual Host)

لإدارة مواقع متعددة على نفس الخادم.

  1. إنشاء ملف المضيف الافتراضي:
    bash
    sudo nano /etc/apache2/sites-available/example.com.conf
  2. إضافة التكوين التالي:
    apache
    <VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
  3. إنشاء مجلد الموقع:
    bash
    sudo mkdir -p /var/www/example.com/public_html
  4. تعيين الصلاحيات:
    bash
    sudo chown -R $USER:$USER /var/www/example.com/public_html
    sudo chmod -R 755 /var/www
  5. تمكين الموقع:
    bash
    sudo a2ensite example.com.conf
    sudo systemctl reload apache2

ج. إعداد SSL لـ Apache باستخدام Let’s Encrypt

  1. تثبيت Certbot:
    bash
    sudo apt install certbot python3-certbot-apache -y
  2. الحصول على شهادة SSL وتثبيتها:
    bash
    sudo certbot --apache -d example.com -d www.example.com
  3. تجديد الشهادة تلقائيًا: Certbot يضيف مهمة تجديد تلقائيًا، ولكن يمكنك التحقق منها:
    bash
    sudo systemctl status certbot.timer

4. تثبيت Nginx على توزيعة Ubuntu

أ. تحديث النظام

bash
sudo apt update
sudo apt upgrade -y

ب. تثبيت Nginx

bash
sudo apt install nginx -y

ج. التحقق من تثبيت Nginx

افتح متصفح الويب وانتقل إلى http://your_server_ip لترى صفحة الترحيب الافتراضية لـ Nginx.


5. إعداد Nginx

أ. إدارة الخدمات

  • بدء الخدمة:
    bash
    sudo systemctl start nginx
  • إيقاف الخدمة:
    bash
    sudo systemctl stop nginx
  • إعادة تشغيل الخدمة:
    bash
    sudo systemctl restart nginx
  • تمكين الخدمة عند الإقلاع:
    bash
    sudo systemctl enable nginx
  • تعطيل الخدمة عند الإقلاع:
    bash
    sudo systemctl disable nginx

ب. إعداد المضيف الافتراضي (Server Block)

لإدارة مواقع متعددة على نفس الخادم.

  1. إنشاء ملف المضيف الافتراضي:
    bash
    sudo nano /etc/nginx/sites-available/example.com
  2. إضافة التكوين التالي:
    nginx
    server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/public_html;
    index index.html index.htm index.nginx-debian.html;

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

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
    }

  3. إنشاء مجلد الموقع:
    bash
    sudo mkdir -p /var/www/example.com/public_html
  4. تعيين الصلاحيات:
    bash
    sudo chown -R $USER:$USER /var/www/example.com/public_html
    sudo chmod -R 755 /var/www
  5. تمكين الموقع:
    bash
    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl reload nginx

ج. إعداد SSL لـ Nginx باستخدام Let’s Encrypt

  1. تثبيت Certbot:
    bash
    sudo apt install certbot python3-certbot-nginx -y
  2. الحصول على شهادة SSL وتثبيتها:
    bash
    sudo certbot --nginx -d example.com -d www.example.com
  3. تجديد الشهادة تلقائيًا: Certbot يضيف مهمة تجديد تلقائيًا، ولكن يمكنك التحقق منها:
    bash
    sudo systemctl status certbot.timer

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

الميزة Apache Nginx
نموذج التشغيل مبني على نموذج المعالجة لكل طلب (Process-based) مبني على نموذج الحدث الواحد (Event-driven)
الأداء جيد مع عدد قليل من الاتصالات أداء عالي مع عدد كبير من الاتصالات
المرونة مرن جدًا مع دعم واسع للوحدات الإضافية مرن ولكن أقل من Apache في بعض الجوانب
سهولة التكوين معقد بعض الشيء بسبب العديد من الخيارات بسيط وسهل الفهم والتكوين
التعامل مع المحتوى الثابت جيد ولكن Nginx أفضل ممتاز في التعامل مع المحتوى الثابت
الدعم والتوافق دعم واسع من المجتمعات والتطبيقات دعم قوي ومتزايد مع تطور المجتمعات

7. إدارة الخدمات

أ. Apache

  • إعادة تحميل التكوينات دون إعادة تشغيل الخدمة:
    bash
    sudo systemctl reload apache2
  • إعادة تشغيل الخدمة:
    bash
    sudo systemctl restart apache2

ب. Nginx

  • إعادة تحميل التكوينات دون إعادة تشغيل الخدمة:
    bash
    sudo systemctl reload nginx
  • إعادة تشغيل الخدمة:
    bash
    sudo systemctl restart nginx

8. تحسين الأداء

أ. تحسين إعدادات التخزين المؤقت (Caching)

  • Apache: استخدم وحدة mod_cache و mod_file_cache لتفعيل التخزين المؤقت.

    تفعيل التخزين المؤقت:

    apache
    LoadModule cache_module modules/mod_cache.so
    LoadModule cache_disk_module modules/mod_cache_disk.so

    <IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
    CacheQuickHandler off
    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5
    CacheIgnoreHeaders Set-Cookie
    CacheRoot "/var/cache/apache2/mod_cache_disk"
    CacheEnable disk /
    CacheDirLevels 2
    CacheDirLength 1
    </IfModule>
    </IfModule>

  • Nginx: استخدم التخزين المؤقت للملفات الثابتة مع إعدادات مناسبة.

    تفعيل التخزين المؤقت:

    nginx
    http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
    location / {
    proxy_cache my_cache;
    proxy_pass http://backend_server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
    }
    }

ب. ضغط البيانات (Compression)

  • Apache: استخدم وحدة mod_deflate لضغط المحتوى.

    تفعيل الضغط:

    apache
    <IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    </IfModule>
  • Nginx: استخدم إعدادات gzip لضغط المحتوى.

    تفعيل الضغط:

    nginx
    http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 256;
    }

9. أمان خدمات الويب

أ. تفعيل HTTPS

استخدام شهادات SSL/TLS لتأمين الاتصالات بين المستخدمين والسيرفر.

  • Apache وNginx: تم شرحه سابقًا في إعداد SSL باستخدام Let’s Encrypt.

ب. إعداد جدار الحماية

تأكد من فتح المنافذ الضرورية فقط (80 للـ HTTP و443 للـ HTTPS).

bash
# استخدام UFW
sudo ufw allow 'Apache Full' # لـ Apache
sudo ufw allow 'Nginx Full' # لـ Nginx
sudo ufw enable

ج. حماية ملفات التكوين

تأكد من أن ملفات التكوين لا تكون متاحة للزوار.

  • Apache:
    apache
    <Directory /etc/apache2/>
    Require all denied
    </Directory>
  • Nginx:
    nginx
    location ~ /\.ht {
    deny all;
    }

د. منع هجمات الـ DDoS والـ Brute Force

استخدم وحدات مثل mod_security لـ Apache أو ngx_http_limit_req_module لـ Nginx.

  • Apache:
    bash
    sudo apt install libapache2-mod-security2 -y
    sudo a2enmod security2
    sudo systemctl restart apache2
  • Nginx: إضافة إعدادات الحد من الطلبات:
    nginx
    http {
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
    location / {
    limit_req zone=mylimit burst=5 nodelay;
    proxy_pass http://backend_server;
    }
    }
    }

هـ. تحديث وتثبيت الحزم الأمنية

تأكد من تثبيت التحديثات الأمنية بانتظام:

bash
# Apache
sudo apt update
sudo apt upgrade apache2 -y

# Nginx
sudo apt update
sudo apt upgrade nginx -y


10. أدوات مساعدة وتكاملات

أ. أدوات المراقبة

استخدم أدوات مثل Prometheus وGrafana لمراقبة أداء وخدمات خوادم الويب.

ب. أدوات إدارة التكوين

استخدم أدوات مثل Ansible أو Puppet لأتمتة إعداد وإدارة خوادم الويب.

ج. التكامل مع CI/CD

دمج خوادم الويب مع خطوط النشر المستمر (CI/CD) لتحديث المواقع بشكل تلقائي وآمن.


11. موارد تعليمية إضافية


خاتمة

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

من geekadmin