Görüntüleri kullanan hemen hemen her web uygulamasında, bu görüntülerin küçük kopyalarını oluşturmaya ihtiyaç vardır ve genellikle ek görüntüler için çeşitli formatlar bulunur.
Mevcut bir uygulamaya yeni boyutlar eklemek de bazı baş ağrılarına neden olur. Dolayısıyla görev:
Görev
İhtiyaç listesini belirtelim:
Uygulamanın varlığı sırasında herhangi bir zamanda uygulamaya ek işlevsellik getirmeden, herhangi bir formatta ek görüntüler oluşturun;
Her istekte ek görsellerin oluşturulmasına gerek yoktur;
Belirtilmemiş formatlarda ek görseller oluşturma özelliğini devre dışı bırakın.
Son noktayı açıklayacağım çünkü bu, ilk noktayla biraz çelişiyor. Herhangi bir görselin oluşturulmasını açık hale getirirsek, o zaman görselin sonsuz sayıda formatta yeniden boyutlandırılması için çok sayıda istek üreterek siteye saldırı olasılığı vardır, bu nedenle bu güvenlik açığının kapatılması gerekir.
nginx kurulum yapılandırması
Yukarıdaki gereksinimleri çözmek için aşağıdaki nginx modülleri setine ihtiyacımız var:
Host konfigürasyonumuza bir yenisini ekliyoruz yer ve genel önbellek parametreleri:
...
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;
}
Her ne kadar boyutları hesaplamanızı da tavsiye etsem de önizleme.
tırmık
Orijinal görüntüyü silerken, önbellek geçersiz kılınıncaya kadar önizlemeler doğal olarak önbellekten silinmeyecektir ve bizim durumumuzda önizlemeler silme işleminden sonraki bir gün boyunca mevcut olabilir, ancak bu maksimum süredir.