Кескіндерді пайдаланатын кез келген дерлік веб-бағдарламада осы кескіндердің шағын көшірмелерін жасау қажеттілігі туындайды және жиі қосымша кескіндер үшін бірнеше пішім бар.
Бар қолданбаға жаңа өлшемдерді қосу да кейбір бас ауруларын тудырады. Сондықтан тапсырма:
Мақсаты
Талаптар тізімін белгілейік:
Қолданба бар кез келген уақытта қолданбаға қосымша функционалдық мүмкіндіктер енгізбестен, кез келген форматтағы қосымша кескіндерді жылдам жасаңыз;
Әрбір сұраныс бойынша қосымша кескіндерді жасау қажет емес;
Белгіленбеген пішімдердің қосымша кескіндерін жасау мүмкіндігін өшіріңіз.
Мен соңғы тармақты түсіндіремін, өйткені ол бірінші тармаққа сәл қайшы келеді. Егер біз кез келген кескіннің генерациясын ашық етсек, онда кескіннің өлшемін форматтардың шексіз санына өзгертуге көптеген сұраныстарды жасау арқылы сайтқа шабуыл жасау мүмкіндігі бар, сондықтан бұл осалдықты жабу керек.
nginx орнату конфигурациясы
Жоғарыда аталған талаптарды шешу үшін бізге nginx модульдерінің келесі жиынтығы қажет:
Модульдер ngx_http_image_filter_module и ngx_http_secure_link_module әдепкі бойынша орнатылмайды, сондықтан оларды орнату конфигурациялау сатысында көрсету керек 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;
}
Дегенмен мен өлшемдерді есептеуді ұсынар едім алдын-ала қарау.
Rake
Түпнұсқа кескінді жойған кезде, алдын ала қараулар, әрине, кэш жарамсыз болмайынша, кэштен жойылмайды, ал біздің жағдайда алдын ала қараулар жойылғаннан кейін бір күн ішінде болуы мүмкін, бірақ бұл максималды уақыт.