Em quase todas as aplicações web que utilizam imagens, é necessário criar pequenas cópias dessas imagens e, muitas vezes, existem vários formatos para imagens adicionais.
Adicionar novas dimensões a um aplicativo existente também causa algumas dores de cabeça. Daí a tarefa:
Tarefa
Vamos denotar a lista de requisitos:
Gerar imagens adicionais de qualquer formato dinamicamente sem introduzir funcionalidades adicionais no aplicativo a qualquer momento durante a existência do aplicativo;
Imagens adicionais não precisam ser geradas em todas as solicitações;
Desative a capacidade de gerar imagens adicionais de formatos não especificados.
Explicarei o último ponto, porque contradiz ligeiramente o primeiro ponto. Se abrirmos a geração de alguma imagem, existe a possibilidade de um ataque ao site gerando um grande número de solicitações de redimensionamento da imagem em um número infinito de formatos, portanto esta vulnerabilidade precisa ser fechada.
configuração de instalação do nginx
Para resolver os requisitos acima, precisamos do seguinte conjunto de módulos nginx:
Módulos ngx_http_image_filter_module и ngx_http_secure_link_module não são instalados por padrão, portanto devem ser especificados no estágio de configuração da instalação nginx:
Adicionamos um novo à nossa configuração de host localização e parâmetros gerais de cache:
...
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;
}
Embora eu também recomende calcular os tamanhos visualização.
Ancinho
Ao excluir a imagem original, as visualizações, naturalmente, não serão excluídas do cache até que o cache seja invalidado e, no nosso caso, as visualizações podem existir por um dia após a exclusão, mas este é o tempo máximo.