nginx / redis и обработка параметров отслеживания в URL - PullRequest
2 голосов
/ 20 декабря 2009

Я использую nginx и redis на моем сайте. Для нескольких элементов на моем сайте я хочу добавить параметры отслеживания в их URL-адреса, чтобы, когда пользователь нажимает на элемент, я мог собирать статистику использования пользователя, помимо обслуживания контента, запрошенного пользователем. Я ищу способы сбора этой статистики в redis из nginx, т. Е. Без использования фонового приложения.

Например, предположим, у меня есть несколько строк таблиц на моей странице, и каждая таблица содержит элементы в формате строки / столбца. Итак, для элемента в {таблица: 2, строка: 1, столбец: 3}, если фактический URL-адрес: www.mysite.com/news/dodi, то я хочу встроить URL-адрес: www.mysite.com/news / Dodi / день = 29? таблицы = 2 & строка = 1 & колонка = 3. Когда пользователь щелкает по нему, nginx нажимает на redis, чтобы получить содержимое, а также обновляет соответствующую статистику (здесь может быть приращение день-29, таблица-2, ...).

Есть ли какие-либо предложения о том, как этого добиться, не обращаясь к фоновому приложению?

1 Ответ

3 голосов
/ 20 декабря 2009

Для параметров отслеживания оставьте этот тип работы вне рамок запроса пользователей. Не заставляйте их платить штраф за задержку за отслеживание статистики. Cron скрипт, который извлекает параметры из access.log и обновляет redis и / или базу данных.

Что касается содержимого для кэширования, существует недавно выпущенный модуль nginx redis, который работает почти так же, как модуль memcached. В настоящее время реализованы только GET и SELECT. Предполагается, что ваше приложение заполняет кэш.

http://wiki.nginx.org/Nginx3rdPartyModules#HTTP_Redis_Module

Пример nginx.conf:

http
{
 ...
        server {
            location / {
                set $redis_db   "0";
                set $redis_key  "$uri?$args";
                redis_pass      127.0.0.1:6379;
                error_page      404 502 504 = @fallback;
             }

             location @fallback {
                 proxy_pass      backed;
             }
        }
}
...