一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - 利用nginx+lua+redis實現反向代理方法教程

利用nginx+lua+redis實現反向代理方法教程

2019-11-27 16:11Furion Nginx

這篇文章主要給大家介紹了利用nginx+lua+redis實現反向代理方法教程,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

前言

最近因為工作需要,要進行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, 配置如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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就完了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.furion.info/787.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女人全身裸露无遮挡免费观看 | 欧美日韩一区二区三区在线播放 | 国产午夜精品福利 | 男人天堂视频网 | 亚洲性夜| 日韩精品亚洲专区在线影视 | www在线看| 亚洲va天堂va国产va久久 | 国产亚洲精品线观看77 | 亚洲第一综合天堂另类专 | 99热在线精品播放 | 日韩视频在线免费 | 久久电影午夜 | 特黄特色大片免费高清视频 | 美女的让男生桶 | 91精品国产人成网站 | 激情三级hd中文字幕 | 99国产精品久久久久久久... | 国产一区二区三区高清视频 | 亚洲精品乱码久久久久久蜜桃图片 | 久久综合网久久综合 | 奇米影视77777 | 青青青国产 | 日韩成人影视 | 亚洲 欧美 国产 日韩 字幕 | 国内精品免费 | 国产肥老上视频 | 国产精品免费看久久久香蕉 | caoporn超碰最新地址进入 | 我的奶头被客人吸的又肿又红 | 波多野结衣xxxx性精品 | 免费观看一级一片 | 精品91| 国产精品成人扳一级aa毛片 | 日本动漫黄网站在线观看 | 免费尤物视频 | 黑人性xxx| 亚洲欧美在线观看首页 | 国产99青草全福视在线 | 暖暖日本高清 | 微拍秒拍99福利精品小视频 |