I næsten enhver webapplikation, der bruger billeder, er der behov for at lave små kopier af disse billeder, og ofte er der flere formater til yderligere billeder.
Tilføjelse af nye dimensioner til en eksisterende applikation forårsager også nogle hovedpine. Derfor opgaven:
Opgave
Lad os betegne listen over krav:
Generer yderligere billeder af ethvert format på farten uden at introducere yderligere funktionalitet i applikationen på noget tidspunkt under applikationens eksistens;
Yderligere billeder behøver ikke at blive genereret på hver anmodning;
Deaktiver muligheden for at generere yderligere billeder i uspecificerede formater.
Jeg vil forklare det sidste punkt, fordi det er lidt i modstrid med det første punkt. Hvis vi gør genereringen af billeder åben, så er der mulighed for et angreb på webstedet ved at generere et stort antal anmodninger om at ændre størrelsen på billedet til et uendeligt antal formater, så denne sårbarhed skal lukkes.
nginx installationskonfiguration
For at løse ovenstående krav har vi brug for følgende sæt nginx-moduler:
moduler ngx_http_image_filter_module и ngx_http_secure_link_module er ikke installeret som standard, så de skal angives på installationskonfigurationsstadiet Nginx:
Vi tilføjer en ny til vores værtskonfiguration placering og generelle cache-parametre:
...
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;
}
Selvom jeg også vil anbefale at beregne størrelserne forhåndsvisning.
Rive
Når du sletter det originale billede, vil forhåndsvisninger naturligvis ikke blive slettet fra cachen, før cachen er ugyldig, og i vores tilfælde kan forhåndsvisninger eksistere i en dag efter sletning, men dette er den maksimale tid.