您描述的场景几乎不可能“按原样”。问题:
- 据我所知,Nginx 无法从 memcached 中读取 cookie。它只能传递响应正文。
- Nginx 确实可以调用“post_action”,但此功能处于测试阶段,您最好避免使用它。
坦率地说,在实际请求之前,我不完全了解您要向 memcached 写入什么 cookie.. 可能您需要提供更多详细信息。
不过,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;
}