利用nginx+lua+redis实现反向代理方法教程

 更新时间:2017年05月08日 11:47:59   作者:Furion  
这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

最近因为工作需要,要进行IVR的重构, 我们现在系统接了三家IVR服务商, N个业务, 由于IVR这玩意一般只能外网回调, 而开发环境又不允许外网随便访问,

着实烦人。 所有我们打算重构一把, 封装多家IVR, 对业务透明, 同时回调可以针对多家IVR服务商的不同callid直接转发到当时请求的同学的

开发域名去。

而不同的IVR服务商的callid参数是不同的,有的是在url里面(call_id), 有的则是直接post的json数据(callid), 所以太扯了。

直接用lua处理下, 查下redis里面这个callid当时是哪位同学发起的请求(请求IVR的时候会写入redis中), 直接proxy_pass到这位同学的开发域名去就ok了。

环境部署

环境直接用openresty吧, redis、json这些常用库都已经打包完毕, 也可以自己安装, 就是太麻烦。

openresty

nginx配置

新建一个vhost, 配置如下

server {

 server_name ivr.com;            
 access_log /home/work/log/nginx/access.ivr.log;
 error_log /home/work/log/nginx/error.ivr.log;

 proxy_set_header Host $http_host;
 proxy_set_header X-Forwarded-Port $server_port;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Forwarded-Protocol $scheme;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_read_timeout 30; 
 proxy_connect_timeout 10; 


 location /ivr/ {
 lua_code_cache off;
 resolver 8.8.8.8;
 set $backend ''; 
 rewrite_by_lua_file /home/work/tengine-2.1.0/conf/lua/ivr.lua;
 proxy_pass http://$backend;
 } 
} 

不加resolver的话可能会报错, 无法解析,加一个8.8.8.8就可以搞定了。

lua_code_cache 是开发环境的配置, 不缓存lua代码, 修改完lua直接生效, 不然每次要重启nginx, 上生产环境要关掉, 严重影响性能。

不过我们这个需求主要是针对开发环境, 所以无所谓。

lua代码

local redis = require "resty.redis"
local cjson = require "cjson"
local cache = redis.new()
cache.connect(cache, '127.0.0.1', '6379')

local args = ngx.req.get_uri_args()
local uri = ngx.var.request_uri

local callid = nil
local channel = 0

if string.find(uri, 'yuntongxun') then
 callid = args["callid"]
 channel = 0
elseif string.find(uri, 'yunhu') then
 ngx.req.read_body()
 local body_data = ngx.req.get_body_data()
 local data = cjson.decode(body_data)
 callid = data['call_id']
 channel = 1
elseif string.find(uri, 'huawei') then
 callid = args["vSessionsId"]
 channel = 2
else 

end

if callid == nil then
 ngx.say(uri)
 ngx.say(cjson.encode(args))
 ngx.say('callid is empty')
 return ''
end


local key = callid .. '_channel' .. channel
local res = cache:get(key)
if res == ngx.null then
 ngx.say("cache get error")
 return ''
end

ngx.var.backend = res

没啥特别的, 针对多个IVR服务商, 进行解析callid, 然后拼成一个key, 去redis中查询整个key当时写入的value(开发者域名),

最后设置backend整个参数, 然后由nginx进行proxy_pass就完了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对程序员之家的支持。

相关文章

  • nginx添加nginx-sticky-module模块步骤的实现

    nginx添加nginx-sticky-module模块步骤的实现

    nginx-sticky-module模块是nginx实现负载均衡的一种方案,和ip_hash负载均衡算法会有区别的,本文主要介绍了nginx添加nginx-sticky-module模块步骤的实现,感兴趣的可以了解一下
    2023-08-08
  • 在Nginx服务器上配置Google反向代理的基本方法

    在Nginx服务器上配置Google反向代理的基本方法

    这篇文章主要介绍了在Nginx服务器上配置Google反向代理的基本方法,文中使用到了SSL来加密反向代理,需要的朋友可以参考下
    2015-12-12
  • nginx反向代理配置去除前缀

    nginx反向代理配置去除前缀

    这篇文章主要介绍了nginx反向代理配置去除前缀的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • nginx限速之连接数限制技巧分享

    nginx限速之连接数限制技巧分享

    通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况。下面这篇文章主要给大家介绍了关于nginx限速之连接数限制技巧的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2018-01-01
  • Nginx配置常用参数梳理(看这一篇就够了)

    Nginx配置常用参数梳理(看这一篇就够了)

    这篇文章主要为大家介绍了Nginx配置常用参数梳理总结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Nginx的正则表达式详解

    Nginx的正则表达式详解

    今天来聊一聊他的正则表达式的使用规则,我会简单的举几个例子然后进行说明讲解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)

    在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)

    这篇文章主要介绍了在Nginx中使用X-Sendfile头提升PHP文件下载的性能,可以用在针对大文件下载的情况,下载非网站Web目录文件的需求,提供下载权限控制的场景,需要的朋友可以参考下
    2014-07-07
  • keepalived+nginx高可用实现方法示例

    keepalived+nginx高可用实现方法示例

    这篇文章主要介绍了keepalived+nginx高可用实现方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • nginx+lua单机上万并发的实现

    nginx+lua单机上万并发的实现

    nginx是我们最常用的服务器,常用于做内容分发和反向代理,本文主要介绍了nginx+lua单机上万并发的实现,有兴趣的可以了解下
    2021-05-05
  • 详解nginx反向代理配置及优化

    详解nginx反向代理配置及优化

    本篇文章主要介绍了详解nginx反向代理配置及优化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论

?


http://www.vxiaotou.com