Сценарий, который вы описали, вряд ли возможен "как есть". Проблемы:
- Насколько мне известно, Nginx не может читать cookie из memcached. Он может передавать только тело ответа.
- Nginx действительно может вызывать "post_action", но эта функция находится в бета-версии, и вам лучше ее избегать.
Честно говоря, я не совсем понимаю, какие куки вы собираетесь записывать в memcached до фактического запроса ... возможно, вам нужно предоставить более подробную информацию.
Тем не менее, Nginx хорошо выполняет многие вещи, которые могут быть вам полезны, поэтому я выделю некоторые из них
Nginx может вернуть пустой GIF, он встроен:
location /tracking {
empty_gif;
}
Nginx очень эффективно записывает журнал, вы можете легко определить формат и записать аргументы запроса, заголовки запросов и ответов в журнал:
log_format tracking '$remote_addr "$request" "$http_referer" $arg_param $upstream_x_track_id';
location /tracking {
access_log /var/log/tracking.log tracking buffer=16k;
proxy_pass http://upstream;
}
Поскольку вы собираетесь использовать memcached, вы, вероятно, хотели кешировать ответы, и это то, что Nginx может сделать для вас (я покажу пример с прокси, но это возможно и с FastCGI):
proxy_cache_path /var/cache/nginx/cache_tracking keys_zone=tracking:20m;
location /tracking {
access_log /var/log/tracking.log tracking buffer=16k;
proxy_cache tracking;
proxy_cache_valid 200 1m; # Cache responses with code 200 for 1 minute
proxy_pass http://upstream;
}
Вы можете определить свой собственный ключ кеша и не передавать его клиенту:
location /tracking {
access_log /var/log/tracking.log tracking buffer=16k;
proxy_cache_key $upstream_x_track_id;
proxy_cache tracking;
proxy_cache_valid 200 1m; # Cache responses with code 200 for 1 minute
proxy_hide_header X-Track_Id;
proxy_pass http://upstream;
}