nginx/redis 和处理 url 中的跟踪参数

Posted

技术标签:

【中文标题】nginx/redis 和处理 url 中的跟踪参数【英文标题】:nginx/redis and handling tracking params in url 【发布时间】:2010-12-28 11:14:16 【问题描述】:

我在我的网站中使用 nginx 和 redis。对于我网站上的几个项目,我想将跟踪参数添加到它们的 url,以便当用户点击一个项目时,我可以收集用户使用的统计信息,而不是提供用户请求的内容。我正在寻找有关如何从 nginx 在 redis 中捕获此统计信息的方法,即不打后台应用程序。

例如,假设我的页面上有几行表格,每个表格都以行/列格式保存项目。因此,对于 table: 2, row: 1, column: 3 中的项目,如果实际 url 是:www.mysite.com/news/dodi,那么我想嵌入 url:www.mysite.com/news /dodi/day=29?table=2&row=1&column=3。当用户点击它时,nginx 会点击 redis 来获取内容并更新相应的统计信息(这里可以是增量 day-29,table-2,...)。

关于如何在不点击后台应用程序的情况下实现这一点的任何建议?

【问题讨论】:

【参考方案1】:

对于跟踪参数,请将此类型的工作保持在用户请求的范围之外。不要让他们为统计跟踪支付延迟损失。 cron 一个脚本,从 access.log 中提取参数并更新 redis 和/或数据库。

在缓存内容方面,最近发布了一个 nginx redis 模块,其工作方式与 memcached 模块大致相同。目前只实现了 GET 和 SELECT。假设是您的应用程序正在填充缓存。

http://wiki.nginx.org/Nginx3rdPartyModules#HTTP_Redis_Module

示例 nginx.conf:

http

 ...
        server 
            location / 
                set $redis_db   "0";
                set $redis_key  "$uri?$args";
                redis_pass      127.0.0.1:6379;
                error_page      404 502 504 = @fallback;
             

             location @fallback 
                 proxy_pass      backed;
             
        

【讨论】:

关于 Cron 脚本和 Nginx 的 Redis 模块的要点。几个问题:【1】在 NginxRedis 模块中添加 SET/INCR 有多难? [2] 按照上面的例子,内容是从redis中获取的。由于这会查询 redis,是否可以添加额外的作业来增加一些 redis 键?有什么方法可以做到这一点吗?鉴于 redis 速度很快,因此添加的作业对用户造成的损失将在微秒级 - 因此不会对用户造成可察觉的延迟开销。 整个模块大约有 600 行代码。所以添加额外的命令应该不是什么大不了的事。也就是说,我从未编写过 nginx 模块。 谢谢瑞恩。您能否对上面的查询 #2 有所了解。 不确定。你可以深入挖掘模块的源代码,非常清楚地看到 redis 操作发生在哪里。 Ethan,你可以查看github.com/agentzh/redis2-nginx-module,它声称它支持完整的 redis 协议。

以上是关于nginx/redis 和处理 url 中的跟踪参数的主要内容,如果未能解决你的问题,请参考以下文章

PHP 和 MySQL 中的短 URL 出站链接跟踪

图像工程——目标检测与目标跟踪

get请求中url传参中文乱码问题

在 PHP 中跟踪内存使用情况

url路径中 符号是特殊字符吗

mock和axios常见的传参方式