1. أحد المخابئ التقليدية (404)
تهدف هذه الطريقة إلى توجيه خطأ nginx 404 إلى الواجهة الخلفية، ثم استخدام proxy_store لحفظ الصفحة التي تم إرجاعها بواسطة الواجهة الخلفية.
إعدادات:
موقع/{
root /home/html/;# الدليل الرئيسي
تنتهي صلاحيتها يوم واحد؛# وقت انتهاء صلاحية صفحة الويب
error_page 404 =200 /fetch$request_uri;#404 موجه إلى دليل /fetch
}
الموقع / الجلب / {#404مباشر هنا
داخلي؛ # يشير إلى أنه لا يمكن الوصول إلى هذا الدليل مباشرة خارجيًا
تنتهي صلاحيتها يوم واحد؛# وقت انتهاء صلاحية صفحة الويب
الاسم المستعار /home/html/;# يجب أن يكون عنوان نظام ملفات الدليل الظاهري متوافقًا مع الموقع/، وسيقوم proxy_store بحفظ الملف في هذا الدليل
proxy_pass http://www.sudone.com/;# عنوان المنبع الخلفي، /fetch هو أيضًا وكيل
proxy_set_header Accept-Encoding '';# دع الواجهة الخلفية لا تُرجع المحتوى المضغوط ( gzip أو deflate) سيؤدي حفظ المحتوى المضغوط إلى حدوث مشكلة.
proxy_store on;#حدد nginx لحفظ الملف الذي تم إرجاعه بواسطة الوكيل
proxy_temp_path /home/tmp;# الدليل المؤقت، يجب أن يكون هذا الدليل في نفس قسم القرص الثابت مثل /home/html
}
عند استخدامه ، يرجى ملاحظة أن nginx يجب أن يكون لديه إذن لكتابة الملفات إلى /home/tmp و/home/html ليكون حصريًا للمستخدم الوحيد، بالطبع يمكنك أيضًا chmod 777، لكن جميع مسؤولي النظام ذوي الخبرة سينصحون بعدم استخدام 777 بشكل عرضي.
2. ذاكرة التخزين المؤقت التقليدية 2 (!-e)
المبدأ هو في الأساس نفس مبدأ القفزة 404، ولكنه أكثر إيجازًا:
موقع/{
الجذر /الصفحة الرئيسية/html/;
proxy_store على؛
proxy_set_header قبول التشفير '';
proxy_temp_path /home/tmp;
إذا ( !-f $request_filename )
{
proxy_pass http://www.sudone.com/;
}
}
يمكنك أن ترى أن هذا التكوين يوفر الكثير من التعليمات البرمجية مقارنة بـ 404. ويستخدم !-f لتحديد ما إذا كان الملف المطلوب موجودًا على نظام الملفات، وإذا لم يكن موجودًا، فسيتم تمرير proxy_pass إلى الواجهة الخلفية، ويتم حفظ الإرجاع أيضًا باستخدام proxy_store.
تتمتع كلا ذاكرتي التخزين المؤقت التقليديتين بنفس المزايا والعيوب:
العيب 1: الروابط الديناميكية ذات المعلمات، مثل read.php?id=1، غير مدعومة نظرًا لأن nginx يحفظ اسم الملف فقط، ويتم حفظ هذا الارتباط فقط كـ read.php في نظام الملفات، حتى يتمكن المستخدمون من الوصول إلى القراءة. php?id= 2 سيعرض نتائج غير صحيحة. وفي الوقت نفسه، لا يدعم الصفحة الرئيسية على شكل http://www.sudone.com/ والدليل الثانوي http://www.sudone.com/download/، لأن nginx صادق جدًا وسيكتب يتم إرسال مثل هذا الطلب إلى ملف وفقًا لنظام الارتباط، ومن الواضح أن هذا الرابط عبارة عن دليل، لذا يفشل الحفظ. في هذه الحالات، يلزم إعادة الكتابة للحفظ بشكل صحيح.
العيب 2: لا توجد آلية لانتهاء صلاحية ذاكرة التخزين المؤقت وتنظيفها داخل nginx. سيتم تخزين هذه الملفات المخزنة مؤقتًا بشكل دائم على الجهاز. إذا كان هناك الكثير من الأشياء التي سيتم تخزينها مؤقتًا، فسوف تملأ مساحة القرص الثابت بالكامل. ولهذا الغرض، يمكنك استخدام برنامج شل النصي لتنظيفه بانتظام، ويمكنك كتابة برامج ديناميكية مثل php لإجراء التحديثات في الوقت الفعلي.
العيب 3: يمكن تخزين 200 رمز حالة فقط في ذاكرة التخزين المؤقت، لذلك لن يتم تخزين رموز الحالة مثل 301/302/404 التي يتم إرجاعها بواسطة الواجهة الخلفية في ذاكرة التخزين المؤقت إذا تم حذف رابط شبه ثابت يحتوي على عدد كبير من الزيارات، فسوف يستمر لاختراق وتسبب الطرف الخلفي في تحمل الكثير من الضغط.
العيب 4: لن يقوم nginx تلقائيًا بتحديد الذاكرة أو القرص الصلب كوسيلة للتخزين، كل شيء يتم تحديده من خلال التكوين. بالطبع، ستكون هناك آلية للتخزين المؤقت للملفات على مستوى نظام التشغيل في نظام التشغيل الحالي، لذلك ليست هناك حاجة لذلك تقلق كثيرًا بشأن حدوث مشكلات في أداء عمليات القراءة المتزامنة الكبيرة إذا تم تخزينها على القرص الصلب.
تتمثل عيوب ذاكرة التخزين المؤقت التقليدية لـ nginx أيضًا في ميزاتها المختلفة عن برامج التخزين المؤقت مثل Squid، لذلك يمكن اعتبارها أيضًا ميزة لها. في تطبيقات الإنتاج، غالبًا ما يتم استخدامه كشريك مع Squid. غالبًا ما يكون Squid غير قادر على حظر الروابط مع ?، لكن يمكن لـ nginx حظر الوصول إليها، مثل: http://sudone.com/? com / سيتم التعامل معه على أنه رابطين على Squid، لذلك سيؤدي إلى اختراقين، بينما سيحفظه nginx مرة واحدة فقط، بغض النظر عن أن الرابط يصبح http://sudone.com/?1 أو http://sudone.com/ ?123، لا يمكن تخزينه مؤقتًا بواسطة nginx، وبالتالي حماية مضيف الواجهة الخلفية بشكل فعال.
سيحفظ nginx نموذج الارتباط بأمانة شديدة في نظام الملفات، بحيث يمكنك بسهولة التحقق من حالة ذاكرة التخزين المؤقت ومحتواه على جهاز ذاكرة التخزين المؤقت، ويمكنك أيضًا التعاون بسهولة مع مديري الملفات الآخرين مثل rsync هو هيكل نظام الملفات بالكامل.
يمكن لكل من ذاكرتي التخزين المؤقت التقليديتين حفظ الملفات في /dev/shm ضمن Linux. بشكل عام، أفعل ذلك، بحيث يمكن استخدام ذاكرة النظام للتخزين المؤقت، إذا تم استخدام الذاكرة، فسيتم تنظيف محتوى انتهاء الصلاحية بشكل أسرع. عند استخدام /dev/shm/، بالإضافة إلى توجيه دليل tmp إلى قسم /dev/shm، إذا كان هناك عدد كبير من الملفات والأدلة الصغيرة، فيجب عليك أيضًا تعديل عدد inodes والسعة القصوى لهذه الذاكرة تقسيم:
Mount -o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm
يتم استخدام الأمر أعلاه على جهاز مزود بذاكرة 3G نظرًا لأن الحد الأقصى للذاكرة الافتراضية لـ /dev/shm هو نصف ذاكرة النظام، وهو 1500 ميجابايت، فإن هذا الأمر سيزيدها إلى 2500 ميجابايت قد لا تكون إدخالات النظام كافية افتراضيًا، ولكن الشيء المثير للاهتمام هو أنه يمكن تعديلها حسب الرغبة، والتعديل هنا هو 480000، وهو أمر متحفظ بعض الشيء، ولكنه كافٍ في الأساس.
3. ذاكرة التخزين المؤقت على أساس ذاكرة التخزين المؤقت د
يتمتع nginx ببعض الدعم لـ memcached ، لكن الوظيفة ليست قوية بشكل خاص، ولا يزال الأداء جيدًا جدًا.
الموقع / الذاكرة / {
إذا ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )
{
تعيين $memcached_key "$1"؛
memcached_pass 192.168.1.2:11211;
}
تنتهي 70؛
}
سيوجه هذا التكوين http://sudone.com/mem/abc إلى المفتاح abc الخاص بـ memcached لاسترداد البيانات.
ليس لدى nginx حاليًا أي آلية للكتابة إلى memcached، لذا يجب أن تتم كتابة البيانات إلى memcached باستخدام اللغة الديناميكية في الخلفية. يمكنك استخدام 404 للتوجيه إلى الواجهة الخلفية لكتابة البيانات.
4. استنادًا إلى ncache المكون الإضافي لجهة خارجية
ncache هو مشروع جيد تم تطويره بواسطة Sina Brothers ويستخدم nginx وmemcached لتنفيذ بعض الوظائف المشابهة للتخزين المؤقت لـ Squid.
http://code.google.com/p/ncache/
5. وظيفة proxy_cache المطورة حديثًا لـ nginx
بدءًا من الإصدار nginx-0.7.44، يدعم nginx وظيفة ذاكرة التخزين المؤقت الأكثر رسمية المشابهة لـ Squid، وهو لا يزال في مرحلة التطوير والدعم محدود للغاية وفي الوقت نفسه، يتم أيضًا دعم الحالات غير 200 مثل 404/301/302.
إعدادات:
قم أولاً بتكوين مساحة ذاكرة التخزين المؤقت:
proxy_cache_path /path/to/مستويات ذاكرة التخزين المؤقت=1:2keys_zone=NAME:10m غير نشط=5m max_size=2m clean_time=1m;
لاحظ أن هذا التكوين خارج علامة الخادم. تحدد المستويات أن مساحة ذاكرة التخزين المؤقت تحتوي على مستويين من أدلة التجزئة. دليل المستوى الأول يتكون من حرف واحد، والمستوى الثاني يتكون من حرفين. سيكون اسم الملف المحفوظ مشابهًا لـ /path/. to/cache /c/29/b7f54b2df7773722d382f4809d65029c; Keys_zone يعطي اسمًا لهذه المساحة، 10m يعني أن حجم المساحة غير النشطة هو 10 ميجا بايت؛ يحدد Clean_time دقيقة واحدة لمسح ذاكرة التخزين المؤقت مرة واحدة.
موقع/{
proxy_pass http://www.sudone.com/;
proxy_cache NAME;# استخدم مفاتيح NAME_zone
proxy_cache_valid 200 302 1h;#200 و302 يتم حفظ رموز الحالة لمدة ساعة واحدة
proxy_cache_valid 301 1d;#301 يتم حفظ رمز الحالة لمدة يوم واحد
proxy_cache_valid Any 1m;#يتم حفظ الآخرين لمدة دقيقة واحدة
}