其他相关文章请看这里!
OpenResty是个什么鬼?
谷歌浏览器自定义请求头之ModHeader插件
使用 redis根据请求的User-Agent标头将传入的请求路由到不同的HTTP后端
- 采用了模块Redis2 Nginx的模块, Lua的Nginx的模块,Lua的Redis的解析库,并设置其它的Nginx模块集束OpenResty
配置
创建logs 目录用于存放日志,conf 用于存放配置文件。
mkdir /home/www cd /home/www/ mkdir logs/ conf/
conf 目录下创建一个 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; #授权 #redis2_query auth 'pwd'; #参数解释 #set_unescape_uri 解码设置参数 #$arg_key请求中的的参数名,这个变量包含GET请求中,如果有变量key时的值。即“?”后面的key=value形式的key #$args请求中的参数值,字符串连接 set_unescape_uri $key $arg_key; redis2_query get $key; redis2_pass 192.168.56.2:6379; } location / { set $target ''; #access_by_lua在请求访问阶段处理,用于访问控制,适用于http、server、location、location if #content_by_lua是内容处理器,接受请求并输出响应,适用于location、location if access_by_lua ' local key = ngx.var.http_user_agent -- 在使用上面的方法时, 第一个参数只能是内部请求.这里的内部请求是特指nginx配置文件中的internal 路由 local res = ngx.location.capture( "/redis", { args = { key = key } } ) print("key: ", key) -- 连接redis结束nginx if res.status ~= 200 then ngx.log(ngx.ERR, "redis server returned bad status: ", res.status) ngx.exit(res.status) end -- redis返回空结束nginx if not res.body then ngx.log(ngx.ERR, "redis returned empty body") ngx.exit(500) end -- 此模块主要是处理redis请求和响应的 local parser = require "redis.parser" -- redis返回结果解析判断失败结束nginx 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; } } }
启动 (如果没有任何输出,说明启动成功,-p 指定我们的项目目录,-c 指定配置文件。)
nginx -p `pwd`/ -c conf/nginx.conf #查看nginx进程是否启用 ps -ef|grep nginx|grep -v grep
- 测试
测试前准备
docker安装redis
# 命令来查看可用版本 docker search redis # 拉取官方的最新版本的镜像 docker pull redis:latest # 查看是否已安装了 redis docker images #运行redis容器 #–requirepass 设置密码 #–appendonly 开启redis 持久化 #例如 docker run -itd --name myredis -p 6379:6379 redis --requirepass "123456" --appendonly yes docker run -itd --name konga-redis -p 6379:6379 redis #查看容器的运行 docker ps
连接客户端写入路由
redis> set foo apache.org OK redis> set bar nginx.org OK
linux测试访问
#访问到apache.org首页 curl --user-agent foo localhost:8080 #访问到nginx.org首页 curl --user-agent bar localhost:8080
chrome浏览器测试
- 假设你已经安装好
ModHeader
插件,文章开始已经列出了安装插件的相关文章,请自行去了解。 - 设置User-Agent:foo 访问到apache.org首页,设置User-Agent:bar访问到nginx.org首页
- 假设你已经安装好
Comment here is closed