V skoraj vseh spletnih aplikacijah, ki uporabljajo slike, je treba ustvariti majhne kopije teh slik in pogosto obstaja več formatov za dodatne slike.
Nekaj preglavic povzroča tudi dodajanje novih dimenzij obstoječi aplikaciji. Zato naloga:
Naloga
Označimo seznam zahtev:
Sprotno ustvarjanje dodatnih slik poljubnega formata, ne da bi v aplikacijo dodali dodatne funkcije kadar koli med obstojem aplikacije;
Dodatnih slik ni treba generirati ob vsaki zahtevi;
Onemogočite možnost ustvarjanja dodatnih slik nedoločenih formatov.
Pojasnil bom zadnjo točko, ker je nekoliko v nasprotju s prvo točko. Če naredimo generiranje poljubnih slik odprto, potem obstaja možnost napada na spletno mesto z generiranjem velikega števila zahtev za spreminjanje velikosti slike v neskončno število formatov, zato je treba to ranljivost zapreti.
konfiguracija namestitve nginx
Za rešitev zgornjih zahtev potrebujemo naslednji niz modulov nginx:
Moduli ngx_http_modul_filtra_slike и ngx_http_modul_varne_povezave niso privzeto nameščeni, zato jih je treba določiti v fazi konfiguracije namestitve nginx:
V konfiguracijo gostitelja dodamo novega kraj aktivnosti in splošni parametri predpomnilnika:
...
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;
}
Čeprav bi priporočal tudi izračun velikosti Predogled.
Rake
Pri brisanju izvirne slike predogledi seveda ne bodo izbrisani iz predpomnilnika, dokler predpomnilnik ni razveljavljen, v našem primeru pa lahko predogledi obstajajo še en dan po izbrisu, vendar je to največji čas.