Beveik bet kurioje žiniatinklio programoje, kurioje naudojami vaizdai, reikia sukurti mažas šių vaizdų kopijas, o dažnai yra keli papildomų vaizdų formatai.
Naujų dimensijų įtraukimas į esamą programą taip pat sukelia galvos skausmą. Taigi užduotis:
Užduotis
Pažymime reikalavimų sąrašą:
Greitai generuokite papildomus bet kokio formato vaizdus, neįvesdami papildomų programos funkcijų bet kuriuo programos veikimo metu;
Nereikia generuoti papildomų vaizdų pagal kiekvieną užklausą;
Išjunkite galimybę generuoti papildomų nenurodytų formatų vaizdų.
Paaiškinsiu paskutinį punktą, nes jis šiek tiek prieštarauja pirmajam punktui. Jei sukursime bet kokius vaizdus, galime užpulti svetainę generuojant daugybę užklausų pakeisti vaizdo dydį į begalinį formatų skaičių, todėl šį pažeidžiamumą reikia uždaryti.
nginx diegimo konfigūracija
Norint išspręsti aukščiau nurodytus reikalavimus, mums reikia šio nginx modulių rinkinio:
Moduliai ngx_http_image_filter_module и ngx_http_secure_link_module nėra įdiegti pagal numatytuosius nustatymus, todėl jie turi būti nurodyti diegimo konfigūracijos etape nginx:
Prie pagrindinio kompiuterio konfigūracijos pridedame naują vieta ir bendrieji talpyklos parametrai:
...
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;
}
Nors irgi rekomenduočiau pasiskaičiuoti dydžius Peržiūrėti.
Rake
Ištrinant pradinį vaizdą, peržiūros, žinoma, nebus ištrintos iš talpyklos, kol talpykla nebus panaikinta, o mūsų atveju peržiūros gali egzistuoti dieną po ištrynimo, tačiau tai yra maksimalus laikas.