我使用ngx_openresty-1.5.8.1
想在 nginx 代理集群里面做一个proxy 的流量统计的功能, 数据写入到 redis.
因为 redis 无法在 log_by_lua 中使用, 所以我写了个 content_by_lua的redis脚本:
local redis = require "resty.redis"
local cache = redis.new()
local ok, err = cache.connect(cache, '10.0.25.74', '6379')
cache:select(30)
cache:set_timeout(60000)
if not ok then
return
end
ngx.flush()
local size = ngx.var.body_bytes_sent
local key = ngx.var.arg_user
res, err = cache:incrby(key, size)
cache:set(key..":bytes_sent", size)
nginx配置如下:
location ~* ^/proxy$ {
set_unescape_uri $rurl $arg_url;
if ($arg_url ~ ^http%3A%2F%2F(.+?)%2F(.*)$) {
set_unescape_uri $rpath $1;
}
resolver 8.8.8.8;
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header Host $rpath;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass $rurl;
content_by_lua_file 'conf/redis.lua';
}