nginx - как определить одинаковые запросы от конкретного пользователя

Можно ли заставить конфигурацию Nginx подсчитывать одни и те же запросы от конкретного пользователя и вести себя в соответствии с количеством обработанных запросов?

Например, пользователь делает три запроса к одному и тому же URL: http://example.com/file

По первому запросу от этого конкретного пользователя мы делаем перенаправление на: http://example.com/file/one

При втором запросе от этого пользователя перенаправление идет на: http://example.com/file/two

И тогда Nginx каким-то образом понимает, что это третий запрос к http://example.com/file от ТОГО ЖЕ пользователя. он выполняет перенаправление на: http://example.com/file/three

Так возможно ли это?


person Degibons    schedule 12.02.2016    source источник
comment
вы хотите сохранить состояние процесса Nginx? Почему бы не сделать это на сервере?   -  person Anatoly    schedule 13.02.2016
comment
Анатолий, нет, я вообще не хочу использовать бэкенд. Мне нужно выполнять разные перенаправления (в статические файлы), тогда один конкретный пользователь нажимает несколько раз по одной и той же ссылке (как описано в примере)   -  person Degibons    schedule 15.02.2016
comment
это можно сделать, но это определенно непростая конфигурация, и это будет сделано, он будет содержать такую ​​же логику, как и на бэкэнде, но с дополнительной сложностью, вам нужно идентифицировать пользователя и хранить его счетчик где-нибудь с ttl для instance, а nginx этого не делает, вы можете интегрировать redis через lua-скрипт, я рекомендую делать это на сервере.   -  person Abdullah Shahin    schedule 17.02.2016


Ответы (1)


Да, возможно, но:

Во-первых: вам нужно будет определить, что означает «тот же пользователь» (тот же IP ?, заголовок сеанса? Cookie? ...)

Во-вторых: я не думаю, что такая функциональность существует с использованием "vanilla nginx" (без дополнительных модулей), однако с помощью таких модулей, как ngx_lua (openresty) не составит труда реализовать его, используя его функция общего словаря, указав ваш" уникальный идентификатор пользователя "в качестве ключа, а запрос будет считаться значением. Там вы можете проверить состояние карты, чтобы сгенерировать свои перенаправления.

person danielgpm    schedule 17.02.2016
comment
Да, пришлось указать дополнительные условия. Под фразой один и тот же пользователь я подразумеваю пользователя в рамках сеанса. Запросы формируются в течение короткого периода времени, поэтому нет необходимости в какой-то строгой идентификации. Я просто хотел раздать разные статические файлы (связанные с одной общей проблемой), когда пользователь нажимает на специально обобщенную ссылку. И это должно быть быстро, например, Nginx может обслуживать статические файлы. - person Degibons; 19.02.2016