لماذا Cloudflare يُغيّر كل شيء لأداء Laravel
تطبيق Laravel على خادم وحيد في فرانكفورت سيكون له تأخير 180–220ms لمستخدمي دبي. نفس التطبيق خلف Cloudflare مع caching صحيح يُخدَّم من edge node دبي — 8–12ms. هذا الفارق بين موقع يشعر بالفورية وآخر يشعر بالثقل.
أكثر خطأ شائع: المطورون يُعدّون Cloudflare في proxy mode لكن لا يُعدّون cache rules، فلا شيء يُخزَّن سوى الـ static assets. تطبيق Laravel ما زال يعالج كل طلب. هذا الدليل يحل ذلك بالكامل.
الجزء 1: الإعدادات الأساسية
SSL/TLS: اضبط وضع التشفير على Full (strict). لا تستخدم "Flexible" أبداً على تطبيق Laravel في الإنتاج.
إعدادات السرعة: Auto Minify (HTML+CSS+JS): ON. Brotli: ON. Early Hints: ON (Pro). HTTP/3: ON. Rocket Loader: OFF لتطبيقات Laravel — يكسر Alpine.js والـ frameworks التي تُهيَّأ عند DOM ready.
الجزء 2: Cache Rules — الجزء الحاسم
السلوك الافتراضي لـ Cloudflare يُخزّن الملفات ذات الامتدادات الثابتة المعروفة فقط. صفحات HTML — مسارات Laravel — لا تُخزَّن افتراضياً. لتخزين HTML، يجب إعداده صراحةً.
Rule 1: تجاوز Cache للمسارات المصادق عليها
When: URI Path contains "/admin" OR "/dashboard" OR "/api" OR Cookie contains "laravel_session" Then: Cache Status: Bypass
Rule 2: تخزين الـ Static Assets (TTL طويل)
When: URI Path ends with .css OR .js OR .webp OR .woff2 Then: Cache Everything Edge Cache TTL: 1 month
Rule 3: تخزين الصفحات العامة
When: URI starts with "/en/" OR "/ar/" Then: Cache Everything Edge Cache TTL: 1 hour Vary: Accept-Language
الجزء 3: Cache Headers من جانب Laravel
// في middleware
if ($request->isMethodSafe() && !$request->user()) {
$response->headers->set('Cache-Control',
"public, max-age=3600, s-maxage=14400"
);
$response->headers->set('Vary', 'Accept-Language, Accept-Encoding');
}
الجزء 4: مسح Cache عند النشر
curl -X POST "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/purge_cache" -H "Authorization: Bearer ${CF_API_TOKEN}" -H "Content-Type: application/json" --data '{"purge_everything":true}'
أخطاء شائعة يجب تجنبها
- تخزين صفحات المستخدمين المصادق عليهم — دائماً ضع قاعدة bypass للـ session cookie أولاً
- عدم ضبط Vary headers — المواقع متعددة اللغات يجب أن تُضمّن
Vary: Accept-Language - نسيان CSRF tokens في HTML المُخزَّن — انقل جلب CSRF token لـ JavaScript (AJAX) بدل تضمينه في HTML
- تخزين أخطاء 500 — أضف rule لـ bypass عند response status 500
هل تريدنا نُعدّ هذا لتطبيقك؟
نُعدّ ونُدير Cloudflare لجميع تطبيقات Laravel التي نبنيها. تدقيق مجاني خلال 48 ساعة.