Peaaegu igas pilte kasutavas veebirakenduses on vaja luua nendest piltidest väikesed koopiad ja sageli on lisapiltide jaoks mitu vormingut.
Omajagu peavalu tekitab ka uute dimensioonide lisamine olemasolevale rakendusele. Seega ülesanne:
Ülesanne
Tähistame nõuete loendit:
Genereerige mis tahes vormingus lisapilte käigupealt ilma rakendusele lisafunktsioone lisamata igal ajal rakenduse eksisteerimise ajal;
Lisapilte ei pea genereerima iga taotluse korral;
Keela võimalus genereerida määratlemata vormingus täiendavaid pilte.
Selgitan viimast punkti, sest see on esimese punktiga veidi vastuolus. Kui muudame mis tahes piltide genereerimise avatuks, on võimalik saidi rünnak, genereerides suure hulga taotlusi pildi suuruse muutmiseks lõpmatusse arvusse vormingutesse, seega tuleb see haavatavus sulgeda.
Moodulid ngx_http_image_filter_module и ngx_http_secure_link_module ei ole vaikimisi installitud, seega tuleb need installimise konfigureerimisetapis täpsustada nginx:
Lisame oma hostikonfiguratsioonile uue liising ja vahemälu üldised parameetrid:
...
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;
}
Kuigi soovitaks ka suurused välja arvutada preview.
Rake
Algse pildi kustutamisel ei kustutata eelvaateid vahemälust loomulikult enne, kui vahemälu on kehtetuks tunnistatud, ja meie puhul võivad eelvaated eksisteerida päev pärast kustutamist, kuid see on maksimaalne aeg.