في أي تطبيق ويب تقريبًا يستخدم الصور، هناك حاجة لإنشاء نسخ صغيرة من هذه الصور، وغالبًا ما يكون هناك عدة تنسيقات للصور الإضافية.
تؤدي إضافة أبعاد جديدة إلى تطبيق موجود أيضًا إلى حدوث بعض المشاكل. ومن هنا المهمة:
مهمة
دعنا نشير إلى قائمة المتطلبات:
إنشاء صور إضافية بأي تنسيق سريعًا دون إدخال وظائف إضافية في التطبيق في أي وقت أثناء وجود التطبيق؛
لا يلزم إنشاء صور إضافية عند كل طلب؛
تعطيل القدرة على إنشاء صور إضافية بتنسيقات غير محددة.
سأشرح النقطة الأخيرة، لأنها تتعارض قليلا مع النقطة الأولى. إذا جعلنا إنشاء أي صور مفتوحًا، فهناك احتمالية حدوث هجوم على الموقع من خلال إنشاء عدد كبير من طلبات تغيير حجم الصورة إلى عدد لا نهائي من التنسيقات، لذلك يجب إغلاق هذه الثغرة الأمنية.
تكوين تثبيت nginx
لحل المتطلبات المذكورة أعلاه، نحتاج إلى المجموعة التالية من وحدات nginx:
نضيف واحدة جديدة إلى تكوين المضيف لدينا موقع ومعلمات ذاكرة التخزين المؤقت العامة:
...
proxy_cache_path /www/myprojects/cache levels=1:2 keys_zone=image-preview:10m;
...
server {
...
location ~ ^/preview/([cir])/(.+) {
# Тип операции
set $oper $1;
# Параметры изображения и путь к файлу
set $remn $2;
# Проксируем на отдельный хост
proxy_pass http://myproject.ru:81/$oper/$remn;
proxy_intercept_errors on;
error_page 404 = /preview/404;
# Кеширование
proxy_cache image-preview;
proxy_cache_key "$host$document_uri";
# 200 ответы кешируем на 1 день
proxy_cache_valid 200 1d;
# остальные ответы кешируем на 1 минуту
proxy_cache_valid any 1m;
}
على الرغم من أنني أوصي أيضًا بحساب الأحجام معاينة.
أشعل النار
عند حذف الصورة الأصلية، بطبيعة الحال، لن يتم حذف المعاينات من ذاكرة التخزين المؤقت حتى يتم إبطال ذاكرة التخزين المؤقت، وفي حالتنا، يمكن أن توجد المعاينات لمدة يوم بعد الحذف، ولكن هذا هو الحد الأقصى للوقت.