تقریباً در هر برنامه وب که از تصاویر استفاده می کند، نیاز به ایجاد کپی های کوچک از این تصاویر وجود دارد و اغلب چندین فرمت برای تصاویر اضافی وجود دارد.
افزودن ابعاد جدید به یک برنامه موجود نیز باعث سردردهایی می شود. از این رو وظیفه:
کار
بیایید لیست الزامات را مشخص کنیم:
ایجاد تصاویر اضافی از هر فرمت در پرواز بدون ارائه عملکرد اضافی به برنامه در هر زمان در طول وجود برنامه؛
در هر درخواستی نیازی به تولید تصاویر اضافی نیست.
قابلیت تولید تصاویر اضافی با فرمت های نامشخص را غیرفعال کنید.
نکته آخر را توضیح می دهم زیرا با نکته اول کمی مغایرت دارد. اگر تولید هر تصویری را باز کنیم، احتمال حمله به سایت با ایجاد تعداد زیادی درخواست برای تغییر اندازه تصویر به تعداد بی نهایت فرمت وجود دارد، بنابراین این آسیب پذیری باید بسته شود.
پیکربندی نصب nginx
برای رفع نیازهای بالا به مجموعه ماژول های nginx زیر نیاز داریم:
ماژول ها ngx_http_image_filter_module и ngx_http_secure_link_module به طور پیش فرض نصب نمی شوند، بنابراین باید در مرحله پیکربندی نصب مشخص شوند انجیناکس:
ما یک مورد جدید به پیکربندی میزبان خود اضافه می کنیم محل و پارامترهای کش عمومی:
...
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;
}
اگرچه من محاسبه اندازه ها را نیز توصیه می کنم پیش دید.
شن کش
هنگام حذف تصویر اصلی، طبیعتاً پیشنمایشها از حافظه پنهان حذف نمیشوند تا زمانی که حافظه پنهان باطل شود، و در مورد ما، پیشنمایشها میتوانند تا یک روز پس از حذف وجود داشته باشند، اما این حداکثر زمان است.