ngx http image filter module и именованный location

tepkuh nginx-forum на forum.nginx.org
Пн Фев 27 08:58:12 UTC 2017


Коллеги,
Есть задача:
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 -;
}

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,272636,272636#msg-272636



Подробная информация о списке рассылки nginx-ru