Szinte minden képeket használó webalkalmazásban szükség van kis másolatok készítésére ezekről a képekről, és gyakran több formátum is létezik a további képekhez.
Új dimenziók hozzáadása egy meglévő alkalmazáshoz szintén okoz némi fejtörést. Ezért a feladat:
Feladat
Jelöljük a követelmények listáját:
Bármilyen formátumú további képeket készíthet menet közben anélkül, hogy további funkciókat vezetne be az alkalmazásba az alkalmazás fennállása során bármikor;
Nem kell minden kérésre további képeket generálni;
Tiltsa le a nem meghatározott formátumú további képek létrehozásának lehetőségét.
Az utolsó pontot kifejtem, mert kissé ellentmond az első pontnak. Ha bármelyik kép generálását megnyitjuk, akkor fennáll a lehetőség, hogy támadás éri az oldalt azáltal, hogy nagyszámú kérést generál a kép végtelen számú formátumra való átméretezésére, ezért ezt a biztonsági rést be kell zárni.
nginx telepítési konfiguráció
A fenti követelmények megoldásához a következő nginx modulokra van szükségünk:
modulok ngx_http_image_filter_module и ngx_http_secure_link_module alapértelmezés szerint nincsenek telepítve, ezért a telepítés konfigurációs szakaszában meg kell adni őket nginx:
Újat adunk a gazdagép konfigurációjához elhelyezkedés és az általános gyorsítótár paraméterei:
...
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;
}
Bár én is javaslom a méretek kalkulálását előnézet.
gereblye
Az eredeti kép törlésekor az előnézetek természetesen nem törlődnek a gyorsítótárból a gyorsítótár érvénytelenítéséig, esetünkben pedig a törlés után egy napig létezhetnek előnézetek, de ez a maximális idő.