دليل تكامل CDN وتحسين الملفات الثابتة
ما هو CDN، إعداد Cloudflare CDN المجاني، تهيئة رؤوس ذاكرة التخزين المؤقت في Nginx، ضغط gzip/brotli، تحسين الصور ودليل رؤوس cache-control.
جدول المحتويات
دليل تكامل CDN وتحسين الملفات الثابتة
سرعة موقعك الإلكتروني أمر بالغ الأهمية لتجربة المستخدم وتصنيفات SEO. يمكن لـ CDN (شبكة توصيل المحتوى) وتحسين الملفات الثابتة أن يقللا بشكل كبير من أوقات تحميل الصفحات. يغطي هذا الدليل أساسيات CDN وإعداد Cloudflare وتهيئة ذاكرة التخزين المؤقت في Nginx وتقنيات الضغط.
ما هو CDN؟
CDN (شبكة توصيل المحتوى) هي بنية تحتية شبكية تُوزّع المحتوى الثابت (الصور، CSS، JavaScript، الفيديو) على خوادم حول العالم وتخدم المستخدمين من أقرب خادم.
فوائد CDN:
- يمكن أن يقلل أوقات تحميل الصفحات بنسبة 50-80%
- يقلل الحمل على الخادم الأصلي
- يوفر حماية ضد هجمات DDoS
- يوفر زمن استجابة منخفض للمستخدمين العالميين
- يخفض تكاليف النطاق الترددي
إعداد Cloudflare CDN المجاني
يوفر Cloudflare CDN وحماية DDoS وشهادة SSL في خطته المجانية.
1. إنشاء حساب Cloudflare
- اذهب إلى cloudflare.com
- أنشئ حساباً مجانياً
- انقر على "Add a Site"
- أدخل اسم نطاقك
- اختر الخطة المجانية
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
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%.
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 ويدعمه المتصفحات الحديثة.
# تثبيت وحدة Brotli
sudo apt install libnginx-mod-brotli -y
http {
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types
text/plain
text/css
application/json
application/javascript
image/svg+xml;
}
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.
# تثبيت أداة 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
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 | الوصف |
|---|---|---|
| HTML | no-cache | دائماً حديث |
| CSS/JS (مع hash) | public, immutable, max-age=31536000 | سنة واحدة |
| الصور | public, max-age=31536000 | سنة واحدة |
| استجابات API | no-store | لا تخزين مؤقت أبداً |
استخدم Chrome DevTools > تبويب Network لاختبار رؤوس ذاكرة التخزين المؤقت. تحقق من قيم Cache-Control و ETag و Age في رؤوس الاستجابة.
الخلاصة
تكامل CDN وتحسين الملفات الثابتة يحسّنان أداء موقعك بشكل ملحوظ. استخدام Cloudflare CDN المجاني للتوزيع العالمي، ورؤوس ذاكرة التخزين المؤقت في Nginx للتخزين المؤقت في المتصفح، وgzip/brotli للضغط، وWebP لتحسين الصور معاً يمكن أن يقلل أوقات تحميل الصفحات بشكل كبير.
مقالات ذات صلة
نشر تطبيق Node.js: دليل PM2 و Nginx
دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.
نشر تطبيق PHP: دليل LAMP و LEMP Stack
دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.
تثبيت WordPress وتحسينه: دليل VPS
دليل تثبيت وتحسين WordPress على VPS. إعداد LEMP Stack، إعدادات wp-config.php، صلاحيات الملفات، SSL، تحسين أداء OPcache وتعزيز الأمان.