En preskaŭ ajna retejo, kiu uzas bildojn, necesas krei malgrandajn kopiojn de ĉi tiuj bildoj, kaj ofte ekzistas pluraj formatoj por pliaj bildoj.
Aldoni novajn dimensiojn al ekzistanta aplikaĵo ankaŭ kaŭzas kelkajn kapdolorojn. Tial la tasko:
Objektivo
Ni indiku la liston de postuloj:
Generu pliajn bildojn de iu ajn formato sur la flugo sen enkonduki pliajn funkciojn en la aplikaĵon iam ajn dum la ekzisto de la aplikaĵo;
Pliaj bildoj ne bezonas esti generitaj sur ĉiu peto;
Malebligu la kapablon generi pliajn bildojn de nespecifitaj formatoj.
Mi klarigos la lastan punkton, ĉar ĝi iomete kontraŭdiras la unuan punkton. Se ni malfermas la generacion de iuj bildoj, tiam ekzistas ebleco de atako sur la retejo generante grandan nombron da petoj por regrandigi la bildon en senfinan nombron da formatoj, do ĉi tiu vundebleco devas esti fermita.
nginx instala agordo
Por solvi ĉi-suprajn postulojn ni bezonas la sekvan aron da nginx-moduloj:
Moduloj ngx_http_image_filter_module и ngx_http_secure_link_module ne estas instalitaj defaŭlte, do ili devas esti specifitaj ĉe la instala agorda stadio nginx:
Ni aldonas novan al nia gastiga agordo loko kaj ĝeneralaj kaŝmemorparametroj:
...
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;
}
Kvankam mi ankaŭ rekomendus kalkuli la grandecojn antaŭvido.
Rake
Kiam vi forigas la originalan bildon, antaŭrigardoj, nature, ne estos forigitaj el la kaŝmemoro ĝis la kaŝmemoro estas malvalidigita, kaj en nia kazo, antaŭrigardoj povas ekzisti dum tago post forigo, sed ĉi tiu estas la maksimuma tempo.