random_index

ola ola_nk на mail.ru
Чт Ноя 3 18:35:53 UTC 2011


Здравствуйте, Maxim.

Вы писали 3 ноября 2011 г., 19:31:04:

>> Помогите, пожалуйста, разобраться с random_index.
>> 
>> server {
>>     listen      127.0.0.1:80;
>>     server_name localhost;
>>     error_log   logs/error.log debug;
>> 
>>     location / {
>>         root   /common/example.org/www;
>>         index  index.html;
>>     }
>> 
>>     location ~ ^/banner(\d+)/$ {
>>         alias /common/example.org/adv/$1/;
>>         random_index on;
>>     }
>> }
>> 
>> При  запросе  /banner2/ получается 404-я ошибка, nginx пытается отдать
>> файл /common/example.org/www/banner2/1.html
>> 
>> Если  использовать  location ~ ^/banner(\d+)/ {} (без завершающего $),
>> то  nginx  делает  10 внутренних редиректов и "Redirection limit of 10
>> URL's reached"

> Если в директиве alias используются переменные, то она задаёт 
> полный путь к файлу, который надо использовать.
Максим,  объясните,  пожалуйста,  поподробнее.  Я  ж вроде и использую
полный путь.

> Должно сработать как-то так:

>     location ~ ^/banner(?<number>\d+)/(?<file>.*) {
>         alias /common/example.org/adv/$number/$file;
>         random_index on;
>     }
Это  немного  не  то. Если использовать ваш вариант, то получается что
рандомные  имена  файлов  (?<file>.*)  надо  генерить  на  бекенде.  А
хотелось бы использовать nginx для этой задачи.
По дебаг-логу видно что нгинкс сначала преобразовывает алиас, затем из
списка   файлов   в   получившейся  директории  выбирает рандомный, но
добавляет  выбранное  имя  файла  к  исходному (текущему?) uri, а не к
пути,  полученному  из  алиаса.  Потом  делается внутренний редирект и
начинается опять поиск нужного дlocation'a.
Вот  если  бы  выбранное  рандомом  имя  добавить  к  преобразованному
алиасу и остановиться на этом...
Пробовала написать break; но видимо оно не для internal redirect.

-- 
С уважением, Ольга Н.



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