← جميع المقالات >
Magento 2Varnish CachePerformance OptimizationSEODevOpsCaching

دليل تكوين ذاكرة التخزين المؤقت Varnish لـ Magento 2

Share: LinkedIn X Facebook

لماذا تكوين ذاكرة التخزين المؤقت 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

  1. انتقل إلى المتاجر → الإعدادات → متقدم → النظام
  2. وسّع ذاكرة التخزين المؤقت للصفحات الكاملة
  3. عيّن تطبيق التخزين المؤقت إلى Varnish Cache
  4. انقر على تكوين Varnish لتوسيع الإعدادات
  5. املأ:
    • قائمة الوصول: localhost (أو IP خادم Magento الخاص بك)
    • المضيف الخلفي: 127.0.0.1
    • المنفذ الخلفي: 8080 (منفذ خادم الويب الخاص بك)
    • فترة السماح: 300 ثانية
  6. انقر على تصدير 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:

  1. انتقل إلى المتاجر → الإعدادات → متقدم → المطور
  2. فعّل استخدام إصدار 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ث (ساعتان)
صفحات CMS86400ث (يوم)
سلة التسوق/الدفع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 .