Решил осуществить давнюю мечту, и написать про некоторые модули nginx, которые используются довольно редко. Сегодня речь пойдёт про random_index_module.
Предположим, вы хотите, чтобы пользователь при каждом следующем заходе на одну и ту же страничку получал немного различающийся контент, случайным образом. Ну, например, ваша софтина имеет кучу наград от нескольких софтверных изданий, которые вы очень хотите продемонстрировать пользователю, но, при этом, место в дизайне странички выделено только под одну картинку. Или вы хотите создать мини-баннерную систему в пределах одного сайта со случайным распределением баннеров. :) Применений может быть много.
Самый простой вариант — сделать несколько статических вариантов странички и включить соответствующую директиву в конфиг.
Таким образом, каждый раз, когда кто-то будет запрашивать у вас /index.html, nginx будет обращаться к каталогу /www/root/random_pages и отдавать один из файлов, которые он там найдёт, случайным образом.
Однако тут есть ряд проблем — если «мигающих» блоков несколько, количество вариантов странички может очень быстро возрастать.
Решение есть, если вспомнить про SSI. Описываем отдельную локацию для каждого набора наших случайных блоков, например:
А в единственной (на этот раз) страничке index.html пишем:
И всё, что вам остаётся сделать — положить в каталоги /www/root/banners/ и /www/root/awards/ по несколько (или хотя бы по одному) файлику с соответствующим html-контентом.
Разумеется, эту схему можно ещё улучшить, добавив обработку ошибок (если вы всё-таки забыли положить в вышеупомянутые папки хотя бы по одному файлу), но это можно оставить «на домашнее задание». :)