Коллеги,
Есть задача:
1) Картинки хранятся в хранилище на Amazon доступ к которому из вне без авторизации запрещен.
2) Нужно тащить из Амазона картинку и ресайзить её.
Для решения этой задачи там где не нужен модуль image_filter я такую задачу решаю так:
1) Есть named location который обеспечивают всю историю с авторизацией
2) И есть несколько обычных location которые отдают контент пользователям уже без авторизации.
Например вот:
location ~ ^/video/(\d+)/(.*\.(?:png))$ {
set $url_full "video/$1/$2";
try_files $uri @s3;
}
location @s3 {
set $bucket 'bucketname';
set $aws_access 'my_key';
set $aws_secret 'my_secret';
set_by_lua $now "return ngx.cookie_time(ngx.time())";
set $string_to_sign "$request_method\n\n\n\nx-amz-date:${now}\n/$bucket/$url_full";
set_hmac_sha1 $aws_signature $aws_secret $string_to_sign;
set_encode_base64 $aws_signature $aws_signature;
resolver 172.31.0.2 valid=300s;
resolver_timeout 10s;
proxy_http_version 1.1;
proxy_set_header Host $bucket.s3.amazonaws.com;
proxy_set_header x-amz-date $now;
proxy_set_header Authorization "AWS $aws_access:$aws_signature";
proxy_buffering off;
proxy_pass https://$bucket.s3.amazonaws.com/$url_full;
}
Так вот коллеги, вопрос в том что аналогичная штука но с использованием image_filter у меня не прокатывает.
Пример location для этих самых картинок которые требуется ресайзить:
location ~ ^/img/(xs|s|m)/(\d+)/(.*\.(?:jpg|gif|png))$ {
set $img_size $1;
set $url_full "img/$2/$3";
try_files $uri @s3;
if ($img_size = "xs") {
set $width 50;
}
if ($img_size = "s") {
set $width 100;
}
if ($img_size = "m") {
set $width 200;
}
image_filter resize $width -;
}