Всем привет.
Когда пользователь заходит на сайт напрямую, значение $http_referer будет пустым. А когда он перейдет на внутреннюю страницу сайта, $http_referer будет равен адресу первой страницы. Умеет ли nginx каким-либо образом запоминать или помечать пользователей, чтобы, например, если пользователь зашел изначально напрямую, а затем стал ходить по сайту, nginx понимал, что это все тот же пользователь, у которого изначально был пустой реферер?
Всё это нужно для того, чтобы с помощью sub_filter изменять некоторые элементы сайта в зависимости от значения http_referer.
Это, в целом, задача не нгинкса, а бэкэнда - что-то менять в зависимости от пользователя. И, как верно заметили выше - куки для этого подходят куда больше.
Вы правы, но меня сейчас интересует, есть ли вообще в принципе возможность вносить изменения с помощью nginx в рамках описанных условий. У меня уже частично это реализовано. Если это прямой пользователь, он получает один ID элемента страницы. Если он зашел из facebook.com - другой. Если с поисковика, то оставляем как есть. Проблема в том, что внутренние переходы - это отдельная категория, и я не нашел, как средствами nginx определить, откуда изначально этот пользователь пришел. Скорее всего да, это нужно делать средствами бэкэнда. Но решил спросить на всякий случай. Nginx уже много раз удивлял своими возможностями.
Тут вопрос касается не столько работы Nginx, сколько протокола HTTP. HTTP не "запоминает" клиента. Nginx лишь может записать реферера, отсюда у вас есть информация о том, откуда пришёл клиент. Дальше на сайте клиент делает новый запрос, который никак не связывается с предыдущим. Поэтому, как верно подсказывают, реализацию вашей задачи надо выполнять на уровне приложения.
От себя добавлю, что перекладывать часть функционала приложения на веб-сервер это не очень хорошая идея.
HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ».