openresty--基于redis实现一个动态路由
来源:互联网 发布:孟山都公司知乎 编辑:程序博客网 时间:2024/05/17 04:15
本文的一个例子主要介绍如何利用redis实现对请求头中User-Agent修改已达到路由到两个不同的http后台的目的。这个例子使用了这些openresty组件: Redis2 Nginx Module, Lua Nginx Module, Lua Redis Parser Library, 和 Set Misc Nginx Module。
1. 配置nginx
下面是完整的nginx.conf
worker_processes 1;error_log logs/error.log info;events { worker_connections 1024;}http { upstream apache.org { server apache.org; } upstream nginx.org { server nginx.org; } server { listen 8080; location = /redis { internal; set_unescape_uri $key $arg_key; redis2_query get $key; redis2_pass 127.0.0.1:6379; } location / { set $target ''; access_by_lua ' local key = ngx.var.http_user_agent local res = ngx.location.capture( "/redis", { args = { key = key } } ) print("key: ", key) if res.status ~= 200 then ngx.log(ngx.ERR, "redis server returned bad status: ", res.status) ngx.exit(res.status) end if not res.body then ngx.log(ngx.ERR, "redis returned empty body") ngx.exit(500) end local parser = require "redis.parser" local server, typ = parser.parse_reply(res.body) if typ ~= parser.BULK_REPLY or not server then ngx.log(ngx.ERR, "bad redis response: ", res.body) ngx.exit(500) end print("server: ", server) ngx.var.target = server '; proxy_pass http://$target; } }}
2. 启动redis
$ ./redis-server # default port is 6379
在启动的redis中设置相关key:
$ ./redis-cliredis> set foo apache.orgOKredis> set bar nginx.orgOK
3. 测试nginx应用:
$ curl --user-agent foo localhost:8080<apache.org home page goes here>$ curl --user-agent bar localhost:8080<nginx.org home page goes here>
如果想获取更好的性能,那么可以启用(redis链接池)[http://openresty.org/cn/redis-2-nginx-module.html]。
ref: http://openresty.org/cn/dynamic-routing-based-on-redis.html
1 0
- openresty--基于redis实现一个动态路由
- Ngnix技术研究系列2-基于Redis实现动态路由
- 用openresty实现动态upstream
- openresty-redis
- openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控
- 基于zookeeper管理redis集群,实现消息路由(一)
- enginx:基于openresty,一个前后端统一,生态共享的webstack实现
- 安装openresty+redis+lua
- 关于OpenResty的redis
- OpenResty连接Redis
- 利用 openresty balancer_by_lua 实现一个简单的 ip_hash upstream 调度
- [OpenResty动态] 201705微信群
- Openresty 动态2017.8
- 利用quagga实现动态路由
- 利用quagga实现动态路由
- Spring动态数据源路由实现
- Spring动态数据源路由实现
- 用addRoutes实现动态路由
- fiddler使用方法
- [MFC] VS2013版本MFC工程移植到VC6.0上
- oracle 10g中的基本概念
- 赫夫曼树的构建
- mybatis自动生成dao、Mapping文件
- openresty--基于redis实现一个动态路由
- 模式识别(Pattern Recognition)学习笔记(五)——概率密度函数(pdf)的参数估计
- 模拟打字软件
- 第一次使用Android Studio时你应该知道的一切配置
- freemarker 获取select的value和内容
- SGU 124 Broken line(计算几何)
- oauth:client-credentials
- HTTP请求(GET与POST区别)和响应
- LeetCode笔记:217. Contains Duplicate