Re: [Bug] обрезается строка в alias

Igor Sysoev igor на sysoev.ru
Ср Июн 2 16:43:59 MSD 2010


On Wed, Jun 02, 2010 at 04:13:37PM +0400, Anton Kuznetsov wrote:

> Похоже на баг.
> 
> ubuntu 10.04
> nginx 0.7.65 (из пакетов)
> 
> кеш картинок в файловой системе, пример
> /path/to/images/12/12345_240x240.png
> запросы, пример
> /images/12345?size=200x200
> 
> ожидаемый результат - отдать нужную картинку
> 
> действительный результат:
> /images/12345 - работает, отдается /path/to/images/12/12345_240x240.png
> /images/12345?size=240x240 - не работает, уходит на бекенд.
> 
> в error логе видно, что удалены последние четыре символа из alias
> /path/to/images/12/12345_240x240
> 
> если поставить в alias еще одну переменную, сохраненную из $arg_foo,
> удаляются 8 байт.
> 
> кусок конфига:
> 
> 	location ~ /image/(\d+)(\d\d\d) {
> 		types { }
> 		default_type image/png;
> 		set $size "240x240";
> 		if ($arg_size) {
> 			set $size "${arg_size}";
> 		}
> 		alias "/path/to/images/$1/$1$2_${size}.png";
> 		error_page 404 405 502 504 = @fallback;
> 	}

Это из-за if. Если число размеров предопределено, то можно так:

     map $arg_size  $size {
         default    240x240;  
         200x200    200x200;  
         ...
     }

     server {

         location ~ /image/(\d+)(\d\d\d) {
             types { }
             default_type image/png;
             alias "/path/to/images/$1/$1$2_${size}.png";
             error_page 404 405 502 504 = @fallback;
         }

-- 
Игорь Сысоев
http://sysoev.ru



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