انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت Nginx و Apache: إعداد المضيف الافتراضي

تثبيت وإعداد خوادم الويب Nginx و Apache، مقارنة الإمكانيات، إنشاء المضيفات الافتراضية، إعداد SSL/TLS وإدارة خدمات الويب في Linux.

وقت القراءة: 15 دقيقة إدارة الخادم
nginxapacheخادم ويبمضيف افتراضيssllinuxhttphttps

جدول المحتويات

تثبيت Nginx و Apache: إعداد المضيف الافتراضي

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

مقارنة Nginx و Apache

الميزةNginxApache
البنيةغير متزامن، event-drivenقائم على العمليات/الخيوط
الملفات الثابتةسريع جداًأبطأ
المحتوى الديناميكييتطلب وكيلاً عكسياًوحدات مدمجة
استخدام الذاكرةمنخفضأعلى
الإعدادأبسطدعم .htaccess
الأفضل لـالمواقع عالية الحركةتطبيقات PHP

اختر Nginx للمحتوى الثابت عالي الحركة أو الوكيل العكسي؛ اختر Apache لتطبيقات PHP (WordPress، Laravel). يمكن استخدامهما معاً: Nginx في المقدمة كوكيل عكسي، Apache في الخلفية كخادم تطبيقات.

تثبيت Nginx

Debian/Ubuntu

hljs bash
# تحديث قائمة الحزم
sudo apt update

# تثبيت Nginx
sudo apt install nginx -y

# تشغيل وتفعيل الخدمة
sudo systemctl start nginx
sudo systemctl enable nginx

# التحقق من الحالة
sudo systemctl status nginx

RHEL/CentOS/AlmaLinux

hljs bash
# إضافة مستودع EPEL
sudo dnf install epel-release -y

# تثبيت Nginx
sudo dnf install nginx -y

# تشغيل وتفعيل الخدمة
sudo systemctl start nginx
sudo systemctl enable nginx

أوامر Nginx الأساسية

hljs bash
# اختبار الإعداد
sudo nginx -t

# إعادة تحميل الإعداد (بدون توقف)
sudo systemctl reload nginx

# إعادة تشغيل الخدمة
sudo systemctl restart nginx

# عرض إصدار Nginx
nginx -v

إعداد المضيف الافتراضي في Nginx

في Nginx، يُنشأ ملف إعداد منفصل لكل موقع تحت /etc/nginx/sites-available/.

مضيف افتراضي أساسي

hljs bash
# إنشاء ملف الإعداد
sudo nano /etc/nginx/sites-available/example.com
hljs nginx
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

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

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

    # لـ PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    # حظر الوصول للملفات المخفية
    location ~ /\.ht {
        deny all;
    }

    # ملفات السجل
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
}
hljs bash
# تفعيل الموقع
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# إنشاء مجلد الويب
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com

# الاختبار وإعادة التحميل
sudo nginx -t && sudo systemctl reload nginx

إعداد الوكيل العكسي في Nginx

hljs nginx
server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_cache_bypass $http_upgrade;
    }
}

تثبيت Apache

Debian/Ubuntu

hljs bash
# تثبيت Apache
sudo apt update
sudo apt install apache2 -y

# تشغيل وتفعيل الخدمة
sudo systemctl start apache2
sudo systemctl enable apache2

# التحقق من الحالة
sudo systemctl status apache2

RHEL/CentOS/AlmaLinux

hljs bash
# تثبيت Apache (httpd)
sudo dnf install httpd -y

# تشغيل وتفعيل الخدمة
sudo systemctl start httpd
sudo systemctl enable httpd

أوامر Apache الأساسية

hljs bash
# اختبار الإعداد
sudo apachectl configtest

# إعادة تحميل الإعداد
sudo systemctl reload apache2

# تفعيل الوحدات
sudo a2enmod rewrite
sudo a2enmod ssl

# تفعيل/تعطيل المواقع
sudo a2ensite example.com
sudo a2dissite 000-default

إعداد المضيف الافتراضي في Apache

hljs bash
# إنشاء ملف الإعداد
sudo nano /etc/apache2/sites-available/example.com.conf
hljs apache
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html

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

    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
hljs bash
# إنشاء مجلد الويب
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com

# تفعيل الموقع
sudo a2ensite example.com.conf

# الاختبار وإعادة التحميل
sudo apachectl configtest && sudo systemctl reload apache2

إعداد SSL/TLS (Let's Encrypt)

استخدم Certbot للحصول على شهادة SSL مجانية:

hljs bash
# تثبيت Certbot
sudo apt install certbot -y

# لـ Nginx
sudo apt install python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

# لـ Apache
sudo apt install python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com

# اختبار التجديد التلقائي
sudo certbot renew --dry-run

إعداد SSL يدوي (Nginx)

hljs nginx
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

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

# إعادة توجيه HTTP إلى HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

إعدادات جدار الحماية

hljs bash
# السماح بـ HTTP و HTTPS مع ufw
sudo ufw allow 'Nginx Full'
# أو
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# لـ Apache
sudo ufw allow 'Apache Full'

على خوادم REXE، لا تنسَ فتح منافذ HTTP (80) و HTTPS (443) من جدار حماية Path Panel أيضاً.

الخلاصة

Nginx و Apache خادما ويب قويان لحالات استخدام مختلفة. Nginx مثالي للمحتوى الثابت عالي الأداء والوكيل العكسي، بينما يُفضَّل Apache لتطبيقات PHP والإعدادات القائمة على .htaccess. مع إعداد المضيف الافتراضي على أي من الخادمين، يمكن استضافة نطاقات متعددة على نفس الخادم.