كيفية تخزين الأصول الثابتة مؤقتًا باستخدام Nginx لمواقع أسرع

Web2026-09-21TryQuickToolBox

لماذا يهم التخزين المؤقت للأصول الثابتة

في كل مرة يزور فيها المستخدم موقعك، يطلب متصفحه العشرات من الأصول الثابتة: ملفات CSS، JavaScript، الصور، الخطوط، والمزيد. بدون التخزين المؤقت المناسب، يصل كل طلب إلى خادمك، مما يزيد أوقات التحميل واستخدام النطاق الترددي. يمكن لـ Nginx، وهو خادم ويب عالي الأداء، تحسين هذا بشكل كبير من خلال إخبار المتصفحات بتخزين هذه الأصول محليًا وتخزينها على جانب الخادم.

في هذا الدليل، ستتعلم كيفية تكوين Nginx لتخزين الأصول الثابتة مؤقتًا بفعالية، مما يقلل من وقت الاستجابة وحمل الخادم.

فهم التخزين المؤقت للمتصفح مقابل التخزين المؤقت من جانب الخادم

هناك نوعان رئيسيان من التخزين المؤقت ذو الصلة هنا:

كلاهما حاسم للأداء. سنغطي كليهما.

الخطوة 1: تكوين التخزين المؤقت للمتصفح باستخدام ترويسات Expires

أبسط طريقة لتمكين التخزين المؤقت للمتصفح هي إضافة توجيهات expires إلى تكوين Nginx الخاص بك. هذا يضبط ترويسات Expires وCache-Control.

افتح ملف تكوين موقعك (مثلاً، /etc/nginx/sites-available/example.com) وأضف كتلة location للأصول الثابتة:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf|eot)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

هذا يخبر المتصفح بتخزين هذه الملفات لمدة عام واحد. يشير التوجيه immutable إلى أن الملف لن يتغير أبدًا، لذا لن يعيد المتصفح التحقق حتى عند إعادة التحميل.

أفضل ممارسة: استخدم أسماء ملفات مُصدّرة (مثلاً، style.abc123.css) حتى تتمكن من تحديث الأصول دون كسر التخزين المؤقت. عندما يتغير الملف، يتغير اسم الملف، ويجلب المتصفح الإصدار الجديد.

الخطوة 2: تمكين التخزين المؤقت من جانب الخادم باستخدام Proxy Cache

إذا كنت تشغل خادم تطبيقات (مثل Node.js، Python، أو PHP) خلف Nginx، يمكنك تخزين الاستجابات الثابتة مؤقتًا في Nginx لتقليل طلبات الواجهة الخلفية.

أولاً، حدد مسار التخزين المؤقت في كتلة http في nginx.conf:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:10m max_size=1g inactive=60m use_temp_path=off;

ثم، في كتلة الخادم الخاصة بك، استخدمه:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg)$ {
    proxy_cache static_cache;
    proxy_cache_valid 200 302 1y;
    proxy_cache_valid 404 1m;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    proxy_cache_lock on;
    add_header X-Cache-Status $upstream_cache_status;
    proxy_pass http://backend;
}

هذا يخزن الاستجابات الناجحة مؤقتًا لمدة عام ويقدم محتوى قديمًا إذا كانت الواجهة الخلفية معطلة. يساعدك ترويسة X-Cache-Status في التصحيح (HIT، MISS، إلخ).

الخطوة 3: التحسين باستخدام الضغط و HTTP/2

يقلل التخزين المؤقت من الطلبات، لكن يمكنك تسريع عمليات النقل بشكل أكبر من خلال تمكين ضغط gzip و HTTP/2.

تمكين gzip في nginx.conf:

gzip on;
gzip_types text/css application/javascript image/svg+xml;
gzip_min_length 1000;

يقوم HTTP/2 بتعدد إرسال الطلبات ويتم تمكينه بإضافة http2 إلى توجيه listen الخاص بك:

listen 443 ssl http2;

ملاحظة: يتطلب HTTP/2 بروتوكول HTTPS. إذا لم تقم بإعداد TLS بعد، راجع دليلنا حول كيفية عمل HTTPS و TLS.

مقارنة: توجيهات Cache-Control

التوجيه المعنى موصى به لـ
public يمكن تخزين الاستجابة مؤقتًا بواسطة أي ذاكرة تخزين مؤقت الأصول الثابتة
private الاستجابة لمستخدم واحد بيانات خاصة بالمستخدم
no-cache يجب إعادة التحقق مع الخادم صفحات HTML
no-store لا تخزن مؤقتًا أبدًا بيانات حساسة
immutable لن يتغير المحتوى أصول مُصدّرة

الخطوة 4: الاختبار والتحقق

بعد تطبيق التغييرات، أعد تحميل Nginx: sudo nginx -s reload. ثم اختبر باستخدام curl:

curl -I https://example.com/style.css

ابحث عن ترويسات Cache-Control وExpires. يمكنك أيضًا استخدام أدوات مطوري المتصفح (علامة تبويب Network) لمعرفة ما إذا كانت الأصول تُقدَّم من ذاكرة التخزين المؤقت (الحالة 200 أو 304).

بالنسبة لذاكرة التخزين المؤقت من جانب الخادم، راقب ترويسة X-Cache-Status.

المزالق الشائعة وأفضل الممارسات

الأسئلة الشائعة

كيف أعرف إذا كانت أصولي يتم تخزينها مؤقتًا؟

تحقق من ترويسات الاستجابة باستخدام curl -I أو أدوات مطوري المتصفح. ابحث عن ترويسات Cache-Control: public, max-age=31536000 وExpires. في أدوات المطورين، سيعرض عمود Size \"(from disk cache)\" للأصول المخزنة مؤقتًا.

ما الفرق بين expires وCache-Control؟

يحدد expires تاريخًا مطلقًا، بينما يستخدم Cache-Control ثوانٍ نسبية. Cache-Control له الأولوية في المتصفحات الحديثة. يضبط توجيه expires في Nginx كليهما للتوافق.

هل يمكنني تخزين المحتوى الديناميكي مؤقتًا؟

نعم، ولكن بحذر. استخدم proxy_cache مع TTLs قصيرة وفكر في مفاتيح ذاكرة التخزين المؤقت بناءً على ملفات تعريف الارتباط أو الترويسات. للمحتوى الخاص بالمستخدم، استخدم private أو تجنب التخزين المؤقت.

سرّع سير عملك مع TryQuickToolBox

أثناء تحسين أداء موقعك، قد تحتاج إلى ضغط الصور أو ملفات PDF. جرب ضاغط الصور لتقليل أحجام الصور دون فقدان الجودة، مما يكمل استراتيجية التخزين المؤقت لـ Nginx.