DOC.PROTOTYPES.RU

Главная > Сервера > nginx > ngx_http_random_index_module >

Редкие фичи nginx: random_index

Решил осуществить давнюю мечту, и написать про некоторые модули nginx, которые используются довольно редко. Сегодня речь пойдёт про random_index_module.

Предположим, вы хотите, чтобы пользователь при каждом следующем заходе на одну и ту же страничку получал немного различающийся контент, случайным образом. Ну, например, ваша софтина имеет кучу наград от нескольких софтверных изданий, которые вы очень хотите продемонстрировать пользователю, но, при этом, место в дизайне странички выделено только под одну картинку. Или вы хотите создать мини-баннерную систему в пределах одного сайта со случайным распределением баннеров. :) Применений может быть много.

Самый простой вариант — сделать несколько статических вариантов странички и включить соответствующую директиву в конфиг.

Код (1)
location /index.html {
    random_index on;
    alias /www/root/random_pages/;
}

Таким образом, каждый раз, когда кто-то будет запрашивать у вас /index.html, nginx будет обращаться к каталогу /www/root/random_pages и отдавать один из файлов, которые он там найдёт, случайным образом.

Однако тут есть ряд проблем — если «мигающих» блоков несколько, количество вариантов странички может очень быстро возрастать.

Решение есть, если вспомнить про SSI. Описываем отдельную локацию для каждого набора наших случайных блоков, например:

Код (2)
location /banners/ {
    random_index on;
    alias /www/root/banners/;
}

location /awards/ {
    random_index on;
    alias /www/root/awards/;
}

А в единственной (на этот раз) страничке index.html пишем:

Код (3)
<div id="banner">
<!--# include virtual="/banners/" -->
</div>
...
<div id="my_preciousss_awards">
<!--# include virtual="/awards/" -->
</div>

И всё, что вам остаётся сделать — положить в каталоги /www/root/banners/ и /www/root/awards/ по несколько (или хотя бы по одному) файлику с соответствующим html-контентом.

Разумеется, эту схему можно ещё улучшить, добавив обработку ошибок (если вы всё-таки забыли положить в вышеупомянутые папки хотя бы по одному файлу), но это можно оставить «на домашнее задание». :)

Иван Авсеянко aka Rebus (27.08.2009 г.)

Еще статьи по теме:

Valid HTML 4.01 Transitional
Copyright © 2011 Сергей Томулевич