دليل تكوين ذاكرة التخزين المؤقت Varnish لـ Magento 2
لماذا تكوين ذاكرة التخزين المؤقت Varnish في Magento 2؟
يأتي Magento 2 مزودًا بـ ذاكرة تخزين مؤقت للصفحات الكاملة (FPC) مدمجة تعتمد إما على نظام الملفات أو Redis. لكن للمتاجر عالية الحركة، لا يتوسع أي من الخيارين بشكل جيد. Varnish Cache هو مسرع HTTP المعياري في الصناعة الذي يمكنه تقديم الصفحات المخبأة في أقل من 5 مللي ثانية — دون لمس PHP أو MySQL مطلقًا.
تأثير SEO: تحسين TTFB (الوقت حتى أول بايت) يحسن مباشرة Core Web Vitals (LCP, FID)، التي تستخدمها Google كإشارات ترتيب منذ 2021.
المتطلبات الأساسية
قبل البدء، تأكد من أن لديك:
- Magento 2.4.x مثبتًا ويعمل
- Varnish 7.x مثبتًا على الخادم (أو كحاوية Docker)
- وصول root أو sudo إلى الخادم
- وصول إلى CLI Magento (
bin/magento) - خادم ويب Nginx أو Apache يعمل
الخطوة 1 — تثبيت Varnish على الخادم
Ubuntu / Debian
sudo apt update
sudo apt install varnish -y
varnishd -V
CentOS / RHEL
sudo yum install varnish -y
varnishd -V
التحقق من إصدار Varnish
يدعم Magento 2.4.x Varnish 6.x و 7.x. استخدم دائمًا أحد هذه الإصدارات لضمان التوافق الكامل.
الخطوة 2 — إنشاء ملف VCL من لوحة إدارة Magento 2
يمكن لـ Magento 2 إنشاء ملف VCL (Varnish Configuration Language) تلقائيًا مصمم لمتجرك. هذه هي الطريقة الأكثر موثوقية.
عبر لوحة إدارة Magento
- انتقل إلى المتاجر → الإعدادات → متقدم → النظام
- وسّع ذاكرة التخزين المؤقت للصفحات الكاملة
- عيّن تطبيق التخزين المؤقت إلى
Varnish Cache - انقر على تكوين Varnish لتوسيع الإعدادات
- املأ:
- قائمة الوصول:
localhost(أو IP خادم Magento الخاص بك) - المضيف الخلفي:
127.0.0.1 - المنفذ الخلفي:
8080(منفذ خادم الويب الخاص بك) - فترة السماح:
300ثانية
- قائمة الوصول:
- انقر على تصدير VCL لـ Varnish 7 (أو 6، حسب إصدارك)
عبر CLI Magento
bin/magento varnish:vcl:generate \
--export-version=7 \
--output-file=/etc/varnish/default.vcl
الخطوة 3 — تكوين Varnish للاستماع على المنفذ 80
افتراضيًا، يستمع Varnish على المنفذ 6081. للإنتاج، تريد Varnish على المنفذ 80 وخادم الويب الخاص بك على المنفذ 8080.
حرّر تكوين خدمة Varnish:
sudo nano /etc/default/varnish
حدّث سطر DAEMON_OPTS:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
لأنظمة systemd (Ubuntu 18.04+)، حرّر أيضًا تجاوز ملف الوحدة:
sudo systemctl edit varnish
أضف:
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd \
-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m
الخطوة 4 — نقل خادم الويب إلى المنفذ 8080
Nginx
# /etc/nginx/sites-available/magento
server {
listen 8080;
server_name yourdomain.com;
root /var/www/magento/pub;
# ... باقي تكوين Nginx لمتجر Magento
}
Apache
# /etc/apache2/ports.conf
Listen 8080
# /etc/apache2/sites-available/magento.conf
<VirtualHost *:8080>
ServerName yourdomain.com
DocumentRoot /var/www/magento/pub
# ... باقي التكوين
</VirtualHost>
أعد تشغيل خادم الويب:
sudo systemctl restart nginx
# أو
sudo systemctl restart apache2
الخطوة 5 — تطبيق VCL وتشغيل Varnish
انسخ VCL المُنشأ إلى دليل تكوين Varnish:
sudo cp /path/to/generated.vcl /etc/varnish/default.vcl
اختبر صيغة VCL قبل إعادة التشغيل:
sudo varnishd -C -f /etc/varnish/default.vcl
إذا لم تكن هناك أخطاء، أعد تشغيل Varnish:
sudo systemctl restart varnish
sudo systemctl enable varnish
الخطوة 6 — تفعيل Varnish في Magento 2
عبر CLI Magento (موصى به)
bin/magento config:set system/full_page_cache/caching_application 2
bin/magento cache:flush
القيمة 2 = Varnish، القيمة 1 = FPC مدمج.
التحقق من التكوين
bin/magento config:show system/full_page_cache/caching_application
الخطوة 7 — تكوين ESI (Edge Side Includes) للكتل الديناميكية
يستخدم Varnish ESI لتخزين الصفحات الكاملة مؤقتًا مع الحفاظ على تحديث الكتل الديناميكية (سلة التسوق، اسم العميل، إلخ). يدعم Magento 2 ESI بشكل أصلي.
تأكد من تفعيل ESI في VCL الخاص بك (يجب أن يكون مضمنًا في VCL المُنشأ تلقائيًا):
sub vcl_recv {
# تفعيل معالجة ESI
if (req.url ~ "^/page_cache/block/esi") {
return(pass);
}
}
في لوحة إدارة Magento:
- انتقل إلى المتاجر → الإعدادات → متقدم → المطور
- فعّل استخدام إصدار JavaScript من ESI إذا لزم الأمر
الخطوة 8 — ضبط TTL ورؤوس التخزين المؤقت
يتضمن VCL المُنشأ إعدادات افتراضية معقولة، لكن يمكنك ضبط TTL (الوقت المتبقي للحياة) لمعدلات إصابة أفضل.
TTL مخصص في VCL
sub vcl_backend_response {
# تخزين صفحات Magento مؤقتًا لمدة ساعة
if (beresp.http.X-Magento-Tags) {
set beresp.ttl = 3600s;
set beresp.grace = 300s;
}
}
قيم TTL الموصى بها
| نوع المحتوى | TTL موصى به |
|---|---|
| صفحات المنتج | 3600ث (ساعة) |
| صفحات الفئات | 7200ث (ساعتان) |
| صفحات CMS | 86400ث (يوم) |
| سلة التسوق/الدفع | 0ث (بدون تخزين مؤقت) |
| منطقة العميل | 0ث (بدون تخزين مؤقت) |
الخطوة 9 — التحقق من أن Varnish يعمل
التحقق من رؤوس الاستجابة
curl -I https://yourdomain.com
ابحث عن هذه الرؤوس في الاستجابة:
X-Cache: HIT ← الصفحة مقدمة من ذاكرة التخزين المؤقت لـ Varnish
X-Cache: MISS ← الطلب الأول، ذاكرة التخزين المؤقت قيد التعبئة
Age: 3542 ← الثواني منذ تخزين الصفحة مؤقتًا
Via: 1.1 varnish ← يؤكد أن حركة المرور تمر عبر Varnish
إحصائيات Varnish المباشرة
varnishstat
ركز على:
MAIN.cache_hit— الطلبات المخبأة التي تمت تلبيتهاMAIN.cache_miss— الطلبات التي ذهبت إلى Magento- نسبة الإصابة =
cache_hit / (cache_hit + cache_miss)— استهدف > 85%
سجل Varnish (في الوقت الفعلي)
varnishlog -g request -q "ReqURL ~ '/'"
الخطوة 10 — مسح ذاكرة التخزين المؤقت لـ Varnish من Magento
يرسل Magento 2 طلبات PURGE إلى Varnish عندما يتم تحديث المنتجات أو الفئات أو صفحات CMS. يتطلب هذا ACL صحيحة في VCL الخاص بك.
التحقق من ACL في VCL
acl purge {
"localhost";
"127.0.0.1";
"::1";
# أضف IP خادم Magento الخاص بك إذا كان منفصلاً
}
sub vcl_recv {
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return(synth(403, "غير مسموح."));
}
return(purge);
}
}
مسح يدوي للذاكرة المؤقتة من CLI Magento
# مسح FPC (يشغل مسح Varnish)
bin/magento cache:flush full_page
# أو من لوحة الإدارة: النظام → إدارة ذاكرة التخزين المؤقت → مسح ذاكرة Magento المؤقتة
المشكلات الشائعة واستكشاف الأخطاء
المشكلة 1 — Varnish لا يخزن مؤقتًا (دائمًا MISS)
السبب: يرسل Magento رؤوس Cache-Control: no-cache أو Set-Cookie.
الإصلاح: تحقق من VCL vcl_recv — يجب أن تتجاوز ملفات تعريف الارتباط للمستخدمين المسجلين الدخول ذاكرة التخزين المؤقت، لكن لا ينبغي للمستخدمين المجهولين تعيين ملفات تعريف الارتباط.
# رؤوس التصحيح
curl -I -v https://yourdomain.com 2>&1 | grep -i cache
المشكلة 2 — بيانات سلة التسوق/العميل غير صحيحة
السبب: ESI غير مهيأ بشكل صحيح، أو Varnish يخزن كتلًا ديناميكية مؤقتًا.
الإصلاح: تأكد من وجود قواعد تمرير ESI في VCL الخاص بك واستبعاد كتل Cacheable=false في Magento.
المشكلة 3 — HTTPS لا يعمل عبر Varnish
السبب: Varnish لا يتعامل مع SSL/TLS بشكل أصلي.
الإصلاح: استخدم Nginx كإنهاء TLS أمام Varnish:
المتصفح → Nginx:443 (TLS) → Varnish:80 → Nginx/Apache:8080 (Magento)
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:80;
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 https;
proxy_set_header Host $host;
}
}
المشكلة 4 — Varnish لا يبدأ بعد تغيير VCL
الإصلاح: تحقق دائمًا من صحة VCL قبل التطبيق:
varnishd -C -f /etc/varnish/default.vcl && echo "VCL OK"
فوائد SEO لذاكرة التخزين المؤقت Varnish على Magento 2
تكوين Varnish بشكل صحيح يحقق تحسينات SEO قابلة للقياس:
- TTFB أقل من 100ms → تحسين Core Web Vitals (LCP, FID/INP)
- تقليل حمل الخادم → مزيد من ميزانية الزحف لـ Googlebot
- تقديم أسرع للصفحات → انخفاض معدل الارتداد → إشارات تفاعل أفضل
- بنية قابلة للتوسع → التعامل مع ارتفاعات حركة المرور دون أخطاء 503 التي تضر بالترتيب
استراتيجية الكلمات المفتاحية لهذا الموضوع
قسم لـ Faouzi Yahyaoui — تقرير ذكاء SEO
| الكلمة المفتاحية | الحجم الشهري (FR+عالمي) | الصعوبة | الهدف |
|---|---|---|---|
| configure varnish cache magento 2 | ~1,200/شهر | 42/100 | معلوماتي |
| magento 2 varnish setup | ~900/شهر | 38/100 | معلوماتي |
| magento 2 varnish vcl | ~600/شهر | 35/100 | معلوماتي |
| magento 2 full page cache varnish | ~500/شهر | 30/100 | معلوماتي |
| varnish magento 2 tutorial | ~400/شهر | 28/100 | معلوماتي |
| magento 2 varnish not working | ~300/شهر | 20/100 | استكشاف أخطاء |
| magento 2 cache ttl varnish | ~150/شهر | 18/100 | طويل الذيل |
الروابط الداخلية الموصى بها:
/magento-2-redis-cache-setup— Redis كمكمل لذاكرة تخزين الجلسات/magento-2-nginx-configuration— تكوين Nginx الخلفي/magento-2-performance-optimization— صفحة الركيزة الرئيسية/magento-2-full-page-cache— نظرة عامة على FPC
الروابط الخارجية الموصى بها (مصادر موثوقة):
الخلاصة
تكوين ذاكرة التخزين المؤقت Varnish في Magento 2 هو أحد تحسينات الأداء الأعلى عائدًا على الاستثمار لمتجرك. مع إعداد مناسب — Varnish على المنفذ 80، خادم الويب على 8080، ESI مفعل، و ACL صحيحة للمسح — يمكنك تحقيق معدلات إصابة ذاكرة تخزين مؤقت من 85 إلى 95% وتقديم الصفحات في أجزاء من الألف من الثانية.
النتيجة: صفحات أسرع، Core Web Vitals أفضل، ترتيب أعلى في Google، وتجربة مستخدم محسنة تحول الزوار إلى عملاء.
هل تحتاج مساعدة في ضبط إعداد Varnish أو تحسين FPC لمتجر Magento؟ اطلع على خدمة تحسين الأداء و خدمة تحسين VPS .