Решил осуществить давнюю мечту, и написать про некоторые модули nginx, которые используются довольно редко. Сегодня речь пойдёт про random_index_module.
Предположим, вы хотите, чтобы пользователь при каждом следующем заходе на одну и ту же страничку получал немного различающийся контент, случайным образом. Ну, например, ваша софтина имеет кучу наград от нескольких софтверных изданий, которые вы очень хотите продемонстрировать пользователю, но, при этом, место в дизайне странички выделено только под одну картинку. Или вы хотите создать мини-баннерную систему в пределах одного сайта со случайным распределением баннеров. :) Применений может быть много.
Самый простой вариант — сделать несколько статических вариантов странички и включить соответствующую директиву в конфиг.
Таким образом, каждый раз, когда кто-то будет запрашивать у вас /index.html, nginx будет обращаться к каталогу /www/root/random_pages и отдавать один из файлов, которые он там найдёт, случайным образом.
Однако тут есть ряд проблем — если «мигающих» блоков несколько, количество вариантов странички может очень быстро возрастать.
Решение есть, если вспомнить про SSI. Описываем отдельную локацию для каждого набора наших случайных блоков, например:
А в единственной (на этот раз) страничке index.html пишем:
И всё, что вам остаётся сделать — положить в каталоги /www/root/banners/ и /www/root/awards/ по несколько (или хотя бы по одному) файлику с соответствующим html-контентом.
Разумеется, эту схему можно ещё улучшить, добавив обработку ошибок (если вы всё-таки забыли положить в вышеупомянутые папки хотя бы по одному файлу), но это можно оставить «на домашнее задание». :)
Предположим, вы хотите, чтобы пользователь при каждом следующем заходе на одну и ту же страничку получал немного различающийся контент, случайным образом. Ну, например, ваша софтина имеет кучу наград от нескольких софтверных изданий, которые вы очень хотите продемонстрировать пользователю, но, при этом, место в дизайне странички выделено только под одну картинку. Или вы хотите создать мини-баннерную систему в пределах одного сайта со случайным распределением баннеров. :) Применений может быть много.
Самый простой вариант — сделать несколько статических вариантов странички и включить соответствующую директиву в конфиг.
location /index.html {
random_index on;
alias /www/root/random_pages/;
}
Таким образом, каждый раз, когда кто-то будет запрашивать у вас /index.html, nginx будет обращаться к каталогу /www/root/random_pages и отдавать один из файлов, которые он там найдёт, случайным образом.
Однако тут есть ряд проблем — если «мигающих» блоков несколько, количество вариантов странички может очень быстро возрастать.
Решение есть, если вспомнить про SSI. Описываем отдельную локацию для каждого набора наших случайных блоков, например:
location /banners/ {
random_index on;
alias /www/root/banners/;
}
location /awards/ {
random_index on;
alias /www/root/awards/;
}
А в единственной (на этот раз) страничке index.html пишем:
<div id="banner">
<!--# include virtual="/banners/" -->
</div>
...
<div id="my_preciousss_awards">
<!--# include virtual="/awards/" -->
</div>
И всё, что вам остаётся сделать — положить в каталоги /www/root/banners/ и /www/root/awards/ по несколько (или хотя бы по одному) файлику с соответствующим html-контентом.
Разумеется, эту схему можно ещё улучшить, добавив обработку ошибок (если вы всё-таки забыли положить в вышеупомянутые папки хотя бы по одному файлу), но это можно оставить «на домашнее задание». :)