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
原创粉丝点击