I nesten alle nettapplikasjoner som bruker bilder, er det behov for å lage små kopier av disse bildene, og ofte finnes det flere formater for tilleggsbilder.
Å legge til nye dimensjoner til en eksisterende applikasjon forårsaker også litt hodepine. Derav oppgaven:
Oppgave
La oss betegne listen over krav:
Generer flere bilder av hvilket som helst format på farten uten å introdusere tilleggsfunksjonalitet i applikasjonen når som helst under applikasjonens eksistens;
Ytterligere bilder trenger ikke å bli generert på hver forespørsel;
Deaktiver muligheten til å generere flere bilder i uspesifiserte formater.
Jeg vil forklare det siste punktet, fordi det er litt i strid med det første punktet. Hvis vi åpner genereringen av bilder, er det en mulighet for et angrep på nettstedet ved å generere et stort antall forespørsler om å endre størrelsen på bildet til et uendelig antall formater, så denne sårbarheten må lukkes.
nginx installasjonskonfigurasjon
For å løse kravene ovenfor trenger vi følgende sett med nginx-moduler:
moduler ngx_http_image_filter_module и ngx_http_secure_link_module er ikke installert som standard, så de må spesifiseres på installasjonskonfigurasjonsstadiet nginx:
Vi legger til en ny i vertskonfigurasjonen vår plassering og generelle hurtigbufferparametere:
...
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;
}
Selv om jeg også vil anbefale å regne ut størrelsene forhåndsvisning.
Rake
Når du sletter originalbildet, vil forhåndsvisninger naturligvis ikke bli slettet fra hurtigbufferen før cachen er ugyldig, og i vårt tilfelle kan forhåndsvisninger eksistere i en dag etter sletting, men dette er maksimumstiden.