需要在nginx / usertrack中使用apache_note()函数

3
我有一个nginx服务器,但需要运行apache_note()功能。是否有任何模块或nginx的任何补丁提供此功能?还需要nginx的usertrack扩展(在apache中readily可用)或类似的替代方法。如果nginx没有usertrack,请建议一些逻辑来模拟相同的功能。

@VBart,我知道这就是为什么要问有没有nginx的替代品。 - Johnny
@VBart apache_note非常方便,如果您想在access_log中添加额外的信息,以便稍后进行更好的分析。 假设您正在对同一URL运行AB测试,针对访问该页面的x%用户,apache_note使您能够揭示用户是A还是B,而无需用户传递额外的查询参数。 - dminer
@dminer,您可以使用响应头来实现相同的目的。更重要的是,nginx有一个专门用于A/B测试的模块:http://nginx.org/en/docs/http/ngx_http_split_clients_module.htmlapache_note()是PHP函数,与nginx无关。 - VBart
3个回答

2

我看到有一个被接受的答案,这里只是补充一下,因为我想许多人,包括我自己,都是通过谷歌搜索apache_note和Nginx而来的。

使用apache_note的主要原因是将某些内容存储在访问日志中。例如,在不使用基本身份验证时,存储用户名。

使用PHP和Nginx实现这个功能的简单方法是将其作为标头(header)发送并记录它。

PHP:header('username: johndoe');

在nginx.conf的log_format中添加以下内容:$sent_http_username

所有标头都以$ sent_http_HEADERNAME的形式可用于日志记录。


1
我在寻找一个替代apache_note()的NGINX时也发现了这个。关于它的信息不多,唯一提到的解决方案是只使用响应头。但是,对于不希望发送给用户的数据,单独使用响应头是无效的,而这正是我正在处理的情况。
我找到的解决方案是使用HttpHeadersMoreModule来清除传递给用户之前的标头。这也会清除"$sent_http_"变量,但会保留"$upstream_http_"以供日志使用。

1

是的,昨天我知道了这件事。仍在测试它是否与用户跟踪相同。 - Johnny
非常感谢。看起来它可以工作。但问题是它需要一个请求来设置cookie,从第二个请求开始我才能获取那个cookie。我能否在第一个请求中访问cookie? - Johnny
看起来你已经找到了答案:http://stackoverflow.com/questions/13412100/not-able-to-get-uid-from-nginx-for-first-request - VBart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接