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

دليل تكامل CDN وتحسين الملفات الثابتة

ما هو CDN، إعداد Cloudflare CDN المجاني، تهيئة رؤوس ذاكرة التخزين المؤقت في Nginx، ضغط gzip/brotli، تحسين الصور ودليل رؤوس cache-control.

وقت القراءة: 14 دقيقة استضافة الويب / التطبيقات
cdncloudflarenginxgzipbrotlicacheتحسينأداءملفات ثابتة

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

دليل تكامل CDN وتحسين الملفات الثابتة

سرعة موقعك الإلكتروني أمر بالغ الأهمية لتجربة المستخدم وتصنيفات SEO. يمكن لـ CDN (شبكة توصيل المحتوى) وتحسين الملفات الثابتة أن يقللا بشكل كبير من أوقات تحميل الصفحات. يغطي هذا الدليل أساسيات CDN وإعداد Cloudflare وتهيئة ذاكرة التخزين المؤقت في Nginx وتقنيات الضغط.

ما هو CDN؟

CDN (شبكة توصيل المحتوى) هي بنية تحتية شبكية تُوزّع المحتوى الثابت (الصور، CSS، JavaScript، الفيديو) على خوادم حول العالم وتخدم المستخدمين من أقرب خادم.

فوائد CDN:

  • يمكن أن يقلل أوقات تحميل الصفحات بنسبة 50-80%
  • يقلل الحمل على الخادم الأصلي
  • يوفر حماية ضد هجمات DDoS
  • يوفر زمن استجابة منخفض للمستخدمين العالميين
  • يخفض تكاليف النطاق الترددي

إعداد Cloudflare CDN المجاني

يوفر Cloudflare CDN وحماية DDoS وشهادة SSL في خطته المجانية.

1. إنشاء حساب Cloudflare

  1. اذهب إلى cloudflare.com
  2. أنشئ حساباً مجانياً
  3. انقر على "Add a Site"
  4. أدخل اسم نطاقك
  5. اختر الخطة المجانية

2. نقل سجلات DNS

يفحص Cloudflare سجلات DNS الموجودة تلقائياً:

A     @        203.0.113.50    Proxied (سحابة برتقالية)
A     www      203.0.113.50    Proxied (سحابة برتقالية)
CNAME api      api.example.com  DNS only (سحابة رمادية)

خيار "Proxied" (السحابة البرتقالية) يوجّه الحركة عبر Cloudflare ويوفر CDN + حماية DDoS. "DNS only" (السحابة الرمادية) يؤدي فقط تحليل DNS.

3. تغيير Nameserver

غيّر nameservers عند مسجّل النطاق إلى القيم التي يوفرها Cloudflare:

ns1.cloudflare.com
ns2.cloudflare.com

4. إعدادات Cloudflare

SSL/TLS: اختر وضع Full (strict)

Caching:

  • Browser Cache TTL: 4 ساعات
  • Cache Level: Standard

Speed:

  • Auto Minify: فعّل JavaScript و CSS و HTML
  • Brotli: فعّل

تهيئة رؤوس ذاكرة التخزين المؤقت في Nginx

hljs nginx
server {
    listen 80;
    server_name example.com;
    root /var/www/mysite;

    # ملفات HTML - بدون تخزين مؤقت
    location ~* \.html$ {
        add_header Cache-Control "no-cache, must-revalidate";
    }

    # CSS و JavaScript - تخزين مؤقت طويل للملفات ذات الإصدارات
    location ~* \.(css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # الصور
    location ~* \.(jpg|jpeg|png|gif|ico|webp|avif|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Vary "Accept-Encoding";
    }

    # ملفات الخطوط
    location ~* \.(woff|woff2|ttf|eot|otf)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        add_header Access-Control-Allow-Origin "*";
    }

    # نقاط نهاية API - بدون تخزين مؤقت
    location /api/ {
        add_header Cache-Control "no-store, no-cache";
        proxy_pass http://localhost:3000;
    }
}

ضغط Gzip

يضغط Gzip الملفات النصية (HTML، CSS، JS) ويقلل حجم النقل بنسبة 60-80%.

hljs nginx
http {
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 256;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/json
        application/javascript
        application/xml
        image/svg+xml
        font/truetype
        font/opentype;
}

ضغط Brotli

يوفر Brotli ضغطاً أفضل بنسبة 15-25% من gzip ويدعمه المتصفحات الحديثة.

hljs bash
# تثبيت وحدة Brotli
sudo apt install libnginx-mod-brotli -y
hljs nginx
http {
    brotli on;
    brotli_comp_level 6;
    brotli_static on;
    brotli_types
        text/plain
        text/css
        application/json
        application/javascript
        image/svg+xml;
}
hljs bash
sudo nginx -t && sudo systemctl reload nginx

# اختبار الضغط
curl -H "Accept-Encoding: br" -I https://example.com
# يجب أن يظهر: Content-Encoding: br

تحسين الصور

التحويل إلى WebP

يوفر تنسيق WebP أحجام ملفات أصغر بنسبة 25-35% مقارنةً بـ JPEG و PNG.

hljs bash
# تثبيت أداة cwebp
sudo apt install webp -y

# تحويل ملف واحد
cwebp -q 80 image.jpg -o image.webp

# تحويل دفعي
for f in /var/www/mysite/images/*.jpg; do
    cwebp -q 80 "$f" -o "${f%.jpg}.webp"
done

تقديم WebP في Nginx

hljs nginx
map $http_accept $webp_suffix {
    default "";
    "~*webp" ".webp";
}

server {
    location ~* \.(jpg|jpeg|png)$ {
        add_header Vary Accept;
        try_files $uri$webp_suffix $uri =404;
    }
}

استراتيجية رؤوس Cache-Control

نوع المحتوىCache-Controlالوصف
HTMLno-cacheدائماً حديث
CSS/JS (مع hash)public, immutable, max-age=31536000سنة واحدة
الصورpublic, max-age=31536000سنة واحدة
استجابات APIno-storeلا تخزين مؤقت أبداً

استخدم Chrome DevTools > تبويب Network لاختبار رؤوس ذاكرة التخزين المؤقت. تحقق من قيم Cache-Control و ETag و Age في رؤوس الاستجابة.

الخلاصة

تكامل CDN وتحسين الملفات الثابتة يحسّنان أداء موقعك بشكل ملحوظ. استخدام Cloudflare CDN المجاني للتوزيع العالمي، ورؤوس ذاكرة التخزين المؤقت في Nginx للتخزين المؤقت في المتصفح، وgzip/brotli للضغط، وWebP لتحسين الصور معاً يمكن أن يقلل أوقات تحميل الصفحات بشكل كبير.