En case calquera aplicación web que utilice imaxes, é necesario crear pequenas copias destas imaxes, e moitas veces hai varios formatos para imaxes adicionais.
Engadir novas dimensións a unha aplicación existente tamén provoca algúns dores de cabeza. De aí a tarefa:
Tarefa
Denotamos a lista de requisitos:
Xera imaxes adicionais de calquera formato sobre a marcha sen introducir funcionalidades adicionais na aplicación en ningún momento durante a existencia da aplicación;
Non é necesario xerar imaxes adicionais en cada solicitude;
Desactiva a capacidade de xerar imaxes adicionais de formatos non especificados.
Explicarei o último punto, porque contradí un pouco o primeiro punto. Se facemos aberta a xeración de imaxes, existe a posibilidade de que se produza un ataque ao sitio ao xerar un gran número de solicitudes para cambiar o tamaño da imaxe a un número infinito de formatos, polo que esta vulnerabilidade debe ser pechada.
configuración de instalación de nginx
Para resolver os requisitos anteriores necesitamos o seguinte conxunto de módulos nginx:
Módulos ngx_http_image_filter_module и ngx_http_secure_link_module non están instalados por defecto, polo que deben especificarse na fase de configuración da instalación Nginx:
Engadimos un novo á configuración do noso host situación e parámetros xerais da caché:
...
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;
}
Aínda que tamén recomendaría calcular as tallas visualización.
Rake
Ao eliminar a imaxe orixinal, as vistas previas, naturalmente, non se eliminarán da caché ata que a caché non se valide, e no noso caso, as vistas previas poden existir durante un día despois da eliminación, pero este é o tempo máximo.