最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用nginx+lua+redis實(shí)現(xiàn)反向代理方法教程

 更新時(shí)間:2017年05月08日 11:47:59   作者:Furion  
這篇文章主要給大家介紹了利用nginx+lua+redis實(shí)現(xiàn)反向代理方法教程,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

前言

最近因?yàn)楣ぷ餍枰?,要進(jìn)行IVR的重構(gòu), 我們現(xiàn)在系統(tǒng)接了三家IVR服務(wù)商, N個(gè)業(yè)務(wù), 由于IVR這玩意一般只能外網(wǎng)回調(diào), 而開發(fā)環(huán)境又不允許外網(wǎng)隨便訪問,

著實(shí)煩人。 所有我們打算重構(gòu)一把, 封裝多家IVR, 對(duì)業(yè)務(wù)透明, 同時(shí)回調(diào)可以針對(duì)多家IVR服務(wù)商的不同callid直接轉(zhuǎn)發(fā)到當(dāng)時(shí)請(qǐng)求的同學(xué)的

開發(fā)域名去。

而不同的IVR服務(wù)商的callid參數(shù)是不同的,有的是在url里面(call_id), 有的則是直接post的json數(shù)據(jù)(callid), 所以太扯了。

直接用lua處理下, 查下redis里面這個(gè)callid當(dāng)時(shí)是哪位同學(xué)發(fā)起的請(qǐng)求(請(qǐng)求IVR的時(shí)候會(huì)寫入redis中), 直接proxy_pass到這位同學(xué)的開發(fā)域名去就ok了。

環(huán)境部署

環(huán)境直接用openresty吧, redis、json這些常用庫(kù)都已經(jīng)打包完畢, 也可以自己安裝, 就是太麻煩。

openresty

nginx配置

新建一個(gè)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的話可能會(huì)報(bào)錯(cuò), 無法解析,加一個(gè)8.8.8.8就可以搞定了。

lua_code_cache 是開發(fā)環(huán)境的配置, 不緩存lua代碼, 修改完lua直接生效, 不然每次要重啟nginx, 上生產(chǎn)環(huán)境要關(guān)掉, 嚴(yán)重影響性能。

不過我們這個(gè)需求主要是針對(duì)開發(fā)環(huán)境, 所以無所謂。

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

沒啥特別的, 針對(duì)多個(gè)IVR服務(wù)商, 進(jìn)行解析callid, 然后拼成一個(gè)key, 去redis中查詢整個(gè)key當(dāng)時(shí)寫入的value(開發(fā)者域名),

最后設(shè)置backend整個(gè)參數(shù), 然后由nginx進(jìn)行proxy_pass就完了。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Linux版本中Nginx平滑升級(jí)與回退

    Linux版本中Nginx平滑升級(jí)與回退

    這篇文章主要介紹了Linux中的Nginx平滑升級(jí)與回退,詳細(xì)介紹了平滑升級(jí)概念和思路講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Nginx搭建高可用的實(shí)現(xiàn)

    Nginx搭建高可用的實(shí)現(xiàn)

    高可用HA是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,本文主要介紹了Nginx搭建高可用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • nginx、Apache、IIS服務(wù)器解決 413 Request Entity Too Large問題方法匯總

    nginx、Apache、IIS服務(wù)器解決 413 Request Entity Too Large問題方法匯總

    這篇文章主要介紹了nginx、Apache、IIS三種服務(wù)器解決413 Request Entity Too Large問題的方法集合,需要的朋友可以參考下
    2014-05-05
  • nginx php-fpm中啟用慢日志配置(用于檢測(cè)執(zhí)行較慢的PHP腳本)

    nginx php-fpm中啟用慢日志配置(用于檢測(cè)執(zhí)行較慢的PHP腳本)

    這篇文章主要介紹了nginx php-fpm中啟用慢日志配置,php-fpm慢日志slowlog設(shè)置可以讓我們很好的看見哪些php進(jìn)程速度太慢而導(dǎo)致的網(wǎng)站問題,可以讓我們方便的找到問題的所在,需要的朋友可以參考下
    2014-05-05
  • nginx url自動(dòng)加斜杠及301重定向的問題

    nginx url自動(dòng)加斜杠及301重定向的問題

    這篇文章主要介紹了nginx url自動(dòng)加斜杠及301重定向的問題的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • nginx keepalive的具體使用

    nginx keepalive的具體使用

    這篇文章主要介紹了nginx keepalive的具體使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Nginx搭建高效的靜態(tài)圖片服務(wù)器的方法步驟

    Nginx搭建高效的靜態(tài)圖片服務(wù)器的方法步驟

    高效地管理和分發(fā)靜態(tài)資源是至關(guān)重要的,本文主要介紹了Nginx搭建高效的靜態(tài)圖片服務(wù)器的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • nginx反向代理時(shí)如何保持長(zhǎng)連接

    nginx反向代理時(shí)如何保持長(zhǎng)連接

    如果我們使用了nginx去作為反向代理或者負(fù)載均衡,從客戶端過來的長(zhǎng)連接請(qǐng)求就會(huì)被轉(zhuǎn)換成短連接發(fā)送給服務(wù)器端。為了支持長(zhǎng)連接,我們需要在nginx服務(wù)器上做一些配置。
    2020-10-10
  • nginx反向代理之將80端口請(qǐng)求轉(zhuǎn)發(fā)到8080

    nginx反向代理之將80端口請(qǐng)求轉(zhuǎn)發(fā)到8080

    這篇文章主要介紹了nginx反向代理之將80端口請(qǐng)求轉(zhuǎn)發(fā)到8080,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Nginx服務(wù)500:Internal Server Error原因之一

    Nginx服務(wù)500:Internal Server Error原因之一

    這篇文章主要介紹了Nginx服務(wù)500:Internal Server Error原因之一,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

泾阳县| 澄江县| 泾川县| 永福县| 梅州市| 丹阳市| 东阳市| 临朐县| 凭祥市| 凌海市| 松江区| 肥城市| 工布江达县| 高要市| 小金县| 陇西县| 调兵山市| 深泽县| 建阳市| 庆元县| 溧阳市| 乌海市| 平罗县| 昭觉县| 扬中市| 桐柏县| 林周县| 崇礼县| 灵山县| 丹江口市| 林甸县| 古浪县| 湖南省| 定远县| 亳州市| 沂水县| 湘阴县| 玛沁县| 岢岚县| 阿拉善盟| 张北县|