Hello!
2013/4/8 Toad Zhou:
> 现在我不知道用lua如何来获取到他们的每个用户的实时下载流量!? 获取用户可以不用GET改用COOKIE也可以,有一个标记就成。求大牛们给点思路谢谢了!
>
当前请求的实时下载流量可以通过读取 $bytes_sent 或者 $body_bytes_sent 这两个标准 Nginx
变量来实现。前者是包括响应头在内的总流量,后者是响应体的流量。细节见这里:
http://wiki.nginx.org/HttpLogModule#log_format
你可以在 log_by_lua 或者 body_filter_by_lua 等上下文中读取此变量并作相应的处理。特别地,在 Lua
中访问这两个变量时,分别使用记法 ngx.var.bytes_sent 或者 ngx.var.body_bytes_sent.
下面是一个例子:
location /t {
echo hello world;
log_by_lua '
print("bytes sent: ", ngx.var.bytes_sent)
print("body bytes sent: ", ngx.var.body_bytes_sent)
';
}
使用 HTTP 1.1 访问此 /t 接口时,在 nginx 的错误日志文件中可以得到下面两行:
[notice] 12627#0: *1 [lua] [string "log_by_lua"]:2: bytes sent: 144
while logging request
[notice] 12627#0: *1 [lua] [string "log_by_lua"]:3: body bytes sent:
12 while logging request
如果你需要做实时流量控制,可以配合共享内存字典等东西来汇总和存储这些数据。
Regards,
-agentzh