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

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

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

前言

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

著實煩人。 所有我們打算重構一把, 封裝多家IVR, 對業(yè)務透明, 同時回調(diào)可以針對多家IVR服務商的不同callid直接轉(zhuǎn)發(fā)到當時請求的同學的

開發(fā)域名去。

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

直接用lua處理下, 查下redis里面這個callid當時是哪位同學發(fā)起的請求(請求IVR的時候會寫入redis中), 直接proxy_pass到這位同學的開發(fā)域名去就ok了。

環(huán)境部署

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

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

不過我們這個需求主要是針對開發(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

沒啥特別的, 針對多個IVR服務商, 進行解析callid, 然后拼成一個key, 去redis中查詢整個key當時寫入的value(開發(fā)者域名),

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

總結(jié)

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

相關文章

  • Linux版本中Nginx平滑升級與回退

    Linux版本中Nginx平滑升級與回退

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

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

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

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

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

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

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

    nginx url自動加斜杠及301重定向的問題

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

    nginx keepalive的具體使用

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

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

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

    nginx反向代理時如何保持長連接

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

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

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

    Nginx服務500:Internal Server Error原因之一

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

最新評論

广宁县| 昭平县| 民权县| 沙河市| 新巴尔虎左旗| 阿巴嘎旗| 定南县| 文山县| 华阴市| 和田市| 北碚区| 峨眉山市| 隆子县| 扎囊县| 桑日县| 博兴县| 泸水县| 景泰县| 永善县| 福海县| 马龙县| 万州区| 伊春市| 游戏| 罗田县| 高淳县| 萨嘎县| 五寨县| 平安县| 衡山县| 韩城市| 扎赉特旗| 久治县| 广昌县| 宜川县| 崇明县| 青川县| 太湖县| 阿克陶县| 遂昌县| 石屏县|