Содержание
Динамический ресайз изображений
Данный способ позволит делать динамический ресайз изображений с кешированием результатов на диске.
Подключение модуля ngx_http_image_filter_module
- /etc/nginx/nginx.conf
include /usr/share/nginx/modules/mod-http-image-filter.conf;
Создание сервера для изменения размеров изображений на порту 8082
- /etc/nginx/conf.d/img-resize.conf
# Сервер для изменения размеров изображений # @link https://habr.com/ru/post/77873/ server { listen 8082; access_log /var/log/nginx/img-resize.access.log combined; error_log /var/log/nginx/img-resize.error.log; # Ошибки отправляем на отдельный location error_page 403 404 415 500 502 503 504 = @404; # информация location ~ ^/i/(.+) { # грязный хак от Игоря Сысоева # try_files — чувствителен к пробелам и русским символам, поэтому пришлось сделать костыль с alias alias /vhosts/site.ru/www/$1; try_files "" @404; # Проверяем правильность ссылки и md5 # Используем соответсвующий фильтр image_filter size; } # crop location ~ ^/c/(\d+|-)x(\d+|-)/(.+) { set $width $1; set $height $2; alias /vhosts/site.ru/www/$3; try_files "" @404; image_filter crop $width $height; } # resize location ~ ^/r/(\d+|-)x(\d+|-)/(.+) { set $width $1; set $height $2; alias /vhosts/site.ru/www/$3; try_files "" @404; image_filter resize $width $height; } location @404 { return 404; } }
Создание location, который будет обслуживать ресайз изображений
- /etc/nginx/img-resize-location.conf
location ~ ^/preview/([cir])/(.+) { # Тип операции set $oper $1; # Параметры изображения и путь к файлу set $remn $2; # Проксируем на отдельный хост proxy_pass http://127.0.0.1:8082/$oper/$remn; proxy_intercept_errors on; error_page 404 = /empty.gif; # Кеширование proxy_cache cache_img; proxy_cache_key "$host$document_uri"; # 200 ответы кешируем на 1 день proxy_cache_valid 200 1d; # остальные ответы кешируем на 1 минуту proxy_cache_valid any 1m; }
Кеширование измененных изображений
- /etc/nginx/conf.d/caches.conf
# Кеш для изображений proxy_cache_path /var/tmp/nginx-cache_img # путь levels=1:2 # количество уровней keys_zone=cache_img:10m # название:размер зоны, 1Мб ~ 8000 ключей (1 ключ - 1 запрос) max_size=1g # размер данных кеша, при превышении удаляются наиболее старые inactive=7d # время хранения запроса на диске с момента последнего обращения, независимо от Cache-Control use_temp_path=off; # off - используем proxy_cache_path; on - используем proxy_temp_path, указанный в location
Настройка сайта
- /etc/nginx/conf.d/site.ru.conf
location = /empty.gif { empty_gif; } location ~* ^.+\.(jpg|jpeg|gif|png|css|js|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { root /vhosts/site.ru/www; index index.php index.html; access_log off; expires 30d; include img-resize-location.conf; }