Onmiddellijk het formaat van afbeeldingen aanpassen
In vrijwel elke webtoepassing die afbeeldingen gebruikt, is het nodig om kleine kopieën van deze afbeeldingen te maken, en vaak zijn er verschillende formaten voor extra afbeeldingen.
Het toevoegen van nieuwe dimensies aan een bestaande applicatie levert ook wat kopzorgen op. Vandaar de opgave:
Taak
Laten we de lijst met vereisten aanduiden:
Genereer direct extra afbeeldingen van elk formaat zonder op enig moment tijdens het bestaan van de applicatie extra functionaliteit in de applicatie te introduceren;
Er hoeven niet bij elke aanvraag extra afbeeldingen te worden gegenereerd;
Schakel de mogelijkheid uit om extra afbeeldingen van niet-gespecificeerde formaten te genereren.
Ik zal het laatste punt toelichten, omdat het enigszins in tegenspraak is met het eerste punt. Als we het genereren van afbeeldingen open maken, bestaat de mogelijkheid van een aanval op de site door een groot aantal verzoeken te genereren om het formaat van de afbeelding in een oneindig aantal formaten te wijzigen. Deze kwetsbaarheid moet dus worden gesloten.
nginx-installatieconfiguratie
Om aan de bovenstaande vereisten te voldoen, hebben we de volgende set nginx-modules nodig:
modules ngx_http_image_filter_module и ngx_http_secure_link_module worden niet standaard geïnstalleerd, dus moeten ze worden opgegeven tijdens de installatieconfiguratiefase nginx:
We voegen een nieuwe toe aan onze hostconfiguratie plaats en algemene cacheparameters:
...
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;
}
Al zou ik ook aanraden om de maten te berekenen Preview.
hark
Bij het verwijderen van de originele afbeelding worden de voorbeelden uiteraard niet uit de cache verwijderd totdat de cache ongeldig is gemaakt, en in ons geval kunnen de voorbeelden nog een dag na het verwijderen bestaan, maar dit is de maximale tijd.