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