server { listen 80; server_name photo.domain.com; location /{set $str $uri; content_by_lua ' local url = ngx.var.uri local res = ngx.location.capture("/proxy", {vars = { str = url }}) ngx.print(res.body) ngx.shared.log_dict:set("url", url) local upstream_stat = ngx.var.status local upstream_time = tonumber(ngx.var.upstream_response_time) local redis = require "resty.redis" local red = redis:new() local ok, err = red:connect("127.0.0.1", 6379) if upstream_stat ~= "200" then red:sadd("url",url) red:incr(url) red:incr(url..":time", upstream_time) end ';} location /dict_status { content_by_lua ' local url = ngx.shared.log_dict:get("url") ngx.say(url) ';} location /redis_status { content_by_lua ' local redis = require "resty.redis" local red = redis:new() local ok,err = red:connect("127.0.0.1", 6379) local urlist,err = red:sort("url","limit","0","1","desc","by","*") if not urlist then ngx.say(err) return end for i = 1, #urlist do local avg = red:get(urlist[i]) local sum = red:get(urlist[i]..":time") ngx.say(urlist[i],"\tavg_time:",avg/sum, "\tsum:",sum) end ';} location /proxy { proxy_pass http://backend_fmn_xnimg_cn$str; proxy_set_header Host'fmn.rrimg.com'; include conf.d/proxy.conf;}}
ngx_lua里的指令有set/rewrite/header_filter/log/content/access_by_lua等,它们各自处于nginx处理流程中的某一步,所以有些日志变量可能不一定都能读取到。还有header_filter和log两个不能调用subrequest和output的API(也就是只能使用上例代码中的ngx.shared.DICT方式,但只支持简单的key-value),content不能和proxy_pass在一起等等……
不过content里可以调用ngx.location.capture()来subrequest其他location,比如这里利用/proxy来完成原来的proxy_pass的功能。 因为subrequest后$uri有变化,所以pass必须写对真正的url的全路径。这就靠之前的set $str来传递变量了。
最终运行结果:
# curl http://fmn.rrimg.cn/redis_status
/test avg_time:0.73 sum:12
相关推荐
而目前市面上用的非常成熟的扩展是由章亦春将Lua和Nginx粘合的ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为OpenResty,这样开发人员就可以安装...
环境: init_worker_by_lua, set...这个 Lua 表可以用来存储基于请求的 Lua 环境数据,其生存周期与当前请求相同 (类似 Nginx 变量)。 参考下面例子, location /test { rewrite_by_lua_block { ngx.ctx.foo = 76 }
配合Ngixn调试一些参入,如GeoIP,Lua等,打印一些变量 echo-nginx-module-0.58.tar.gz
一些变量由 nginx 提供,其他一些变量必须通过带有 Lua-OpenSSL 接口的 nginx-Lua 计算。 文件中给出了所有可用的 SSL 变量及其规范和当前实现状态。安装将文件*.conf复制到您的 nginx 目录/etc/nginx (或其他非...
更新您的上游列表并运行lua脚本,而无需重新加载Nginx。 目录 描述 Slardar是一个基于 , 和的HTTP负载平衡器,通过它您可以更新上游列表并运行lua脚本,而无需重新加载Nginx。 此捆绑包由UPYUN(又拍云)Inc.维护...
cassandra-nginx-cdn 一些配置文件和POC代码将Apache Cassandra用作跨多个数据中心的HLS块的分布式存储,并使用脚本将UDP MPEG-TS转换/转码为HLS,反之亦然。 这个想法来自Globo.com的FIFA 14世界杯直播视频平台。 ...
将原生的lua api做了简单封装,并提供了根据配置文件,自动生成route模块,nginx.conf配置,logger模块的功能,减轻了开发工作量,避免重复手写大量易错的配置或字符串变量,有助于多人开发统一风格,并提供了简单...
nginx 不支持通过参数传入端口或从环境变量中读取,因此我们预处理配置文件。 任何与${{NAME}}匹配的内容都将替换为 nginx 配置配置中的环境变量NAME 。 (注意:不适用于包含的文件) start_nginx.sh脚本将读取...
基于openresty + nginx的api网关,实现了基本的动态路由,动态上游,负载均衡,限流,降级的功能,同时提供了nginx plus的统计功能 系统简图 目录 安装 方式一项目运行依赖[ ],安装了OpenResty的情况下可以跳过此...
但PHP 或着NGINX+LUA方案并不能最优所以选择用NODEJS,开发相对比较简单。本程序完成功能为开启一个HTTP服务,并在服务提供一个全局变量,每秒种更新相关数据,HTTP服务反回最新数据。类似全局数据,大量访问的可以...
docker-redx 为创建一个容器。 配置 redx的配置文件可以通过传递环境变量被动态地配置docker run 。... 如果您希望进行进一步的自定义,例如添加自定义插件或使用自定义 nginx conf 文件,最好使用它作为基础滚动
各个子系统前台thymeleaf模板,前端资源模块,使用nginx代理,实现动静分离。 > zheng-upms 本系统是基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。接入的系统可自由...