Téměř v každé webové aplikaci, která používá obrázky, je potřeba vytvořit malé kopie těchto obrázků a často existuje několik formátů pro další obrázky.
Přidávání nových dimenzí do existující aplikace také způsobuje určité bolesti hlavy. Proto úkol:
Úkol
Označme seznam požadavků:
Vytvářejte další obrázky libovolného formátu za chodu bez zavádění dalších funkcí do aplikace kdykoli během existence aplikace;
Další obrázky není nutné generovat na každý požadavek;
Zakažte možnost generování dalších obrázků neurčených formátů.
Vysvětlím poslední bod, protože je mírně v rozporu s prvním bodem. Pokud otevřeme generování libovolných obrázků, pak existuje možnost útoku na web generováním velkého množství požadavků na změnu velikosti obrázku do nekonečného množství formátů, takže je potřeba tuto zranitelnost uzavřít.
konfigurace instalace nginx
K vyřešení výše uvedených požadavků potřebujeme následující sadu modulů nginx:
Moduly ngx_http_image_filter_module и ngx_http_secure_link_module nejsou ve výchozím nastavení nainstalovány, takže musí být specifikovány ve fázi konfigurace instalace Nginx:
Do naší konfigurace hostitele přidáme nový umístění a obecné parametry mezipaměti:
...
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;
}
I když bych také doporučil spočítat velikosti náhled.
Hrábě
Při mazání původního obrázku se náhledy přirozeně nevymažou z mezipaměti, dokud není mezipaměť zneplatněna, a v našem případě mohou náhledy existovat i den po smazání, ale to je maximální doba.