基于OpenResty lua開發(fā)api gateway 第一篇 簡介

起因

事情的起因是因?yàn)樵蹅兘涌诒凰⒘肆苫埃孕枰鳇c(diǎn)安全方面的操作
然后剛好我有這方面的經(jīng)驗(yàn)(OpenResty) 所以就接手這需求康聂,開始設(shè)計(jì)一個(gè)屬于自己的api gateway荔棉。雖然已經(jīng)有成熟的開源項(xiàng)目濒募,但是比較重坪郭,可能未必完全貼合我們的要求,個(gè)性化難以滿足 嗶哩吧啦 所以開始了踩坑之旅侣监。

引用介紹

OpenResty官網(wǎng):http://openresty.org/cn/
OpenResty最佳實(shí)踐:https://moonbingbing.gitbooks.io/openresty-best-practices/content/

開發(fā)一個(gè)需求 我一般有4步鸭轮, 計(jì)劃、執(zhí)行橄霉、檢查窃爷、修復(fù)

計(jì)劃:

計(jì)劃也就是需求分析,初步挖掘自己要做什么姓蜂,簡單的分析后列出如下幾個(gè)需求:
1按厘、防止別有用心的人使用程序刷接口 可從ip入手,限制同ip的訪問覆糟,畢竟ip庫是要錢的 成本太高也沒人會(huì)刷
2刻剥、請(qǐng)求頭過濾、咱們的app和h5都有特別的請(qǐng)求頭用于標(biāo)識(shí)身份滩字,雖然這個(gè)限制并沒有啥暖用
3造虏、灰度發(fā)布

第一版本,也不要求太高麦箍,先從簡單的入手

本來做出我是想通過在nginx上面配置一個(gè)統(tǒng)一的location 然后根據(jù)動(dòng)態(tài)的規(guī)則調(diào)整uri映射到后端服務(wù)漓藕,但是最終放棄了這個(gè)想法,因?yàn)閷?duì)我們現(xiàn)成的配置改動(dòng)較大挟裂,也不方便應(yīng)用nginx的原生模塊 如proxy_pass享钞、upstream 最終選擇維持現(xiàn)有的配置不變,為每一個(gè)location需要特別處理的執(zhí)行階段加入需要的處理腳本

這里引用:https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx_lua/phase.html 的介紹
set_by_lua: 流程分支處理判斷變量初始化
rewrite_by_lua
: 轉(zhuǎn)發(fā)诀蓉、重定向栗竖、緩存等功能(例如特定請(qǐng)求代理到外網(wǎng))
access_by_lua: IP 準(zhǔn)入暑脆、接口權(quán)限等情況集中處理(例如配合 iptable 完成簡單防火墻)
content_by_lua
: 內(nèi)容生成
header_filter_by_lua: 響應(yīng)頭部過濾處理(例如添加頭部信息)
body_filter_by_lua
: 響應(yīng)體過濾處理(例如完成應(yīng)答內(nèi)容統(tǒng)一成大寫)
log_by_lua*: 會(huì)話完成后本地異步完成日志記錄(日志可以記錄在本地,還可以同步到其他機(jī)器)

ip防刷和請(qǐng)求頭過濾都通過在access_by_lua階段狐肢,設(shè)置相應(yīng)的執(zhí)行腳本完成
灰度發(fā)布通過 proxy_pass添吗、upstream、balancer_by_lua
配合完成
初始化加載配置通過 init_worker_by_lua*完成
重載配置 通過配置特殊location 由后端服務(wù)主動(dòng)發(fā)起

我假定讀者理解nginx基本運(yùn)行原理 熟悉配置份名,知道m(xù)aster與worker進(jìn)程 也理解lua語言 最好還有一部分的后端編程經(jīng)驗(yàn)

程序的大概工作流程是:
1碟联、先必須啟動(dòng)后端服務(wù)(java)
2、啟動(dòng)nginx僵腺,啟動(dòng)階段通過后端服務(wù)提供的http接口獲取運(yùn)行時(shí)配置鲤孵,含黑名單策略,緩存服務(wù)器地址等辰如。
nginx接收到請(qǐng)求普监,以ip加接口地址為key存入redis(使用lua腳本實(shí)現(xiàn)incr與expire的原子操作),當(dāng)達(dá)到閾值丧没,調(diào)用后端服務(wù)提供的添加黑名單http接口
3鹰椒、后端服務(wù)監(jiān)控指定的負(fù)載均衡列表的服務(wù)器的端口锡移,發(fā)生變化時(shí)推送最新配置到nginx呕童,或者是在手動(dòng)修改權(quán)重時(shí)推送。

api gateway的配置我保存在mysql數(shù)據(jù)庫淆珊,使用java與spring boot構(gòu)建后端程序用于與nginx交互夺饲,提供配置或者推送配置,都是通過http接口施符。黑名單ip存放在redis

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末往声,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子戳吝,更是在濱河造成了極大的恐慌浩销,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件听哭,死亡現(xiàn)場(chǎng)離奇詭異慢洋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)陆盘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門普筹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隘马,你說我怎么就攤上這事太防。” “怎么了酸员?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蜒车,是天一觀的道長讳嘱。 經(jīng)常有香客問我,道長酿愧,這世上最難降的妖魔是什么呢燥? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮寓娩,結(jié)果婚禮上叛氨,老公的妹妹穿的比我還像新娘。我一直安慰自己棘伴,他們只是感情好寞埠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焊夸,像睡著了一般仁连。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阱穗,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天饭冬,我揣著相機(jī)與錄音,去河邊找鬼揪阶。 笑死昌抠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲁僚。 我是一名探鬼主播炊苫,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼冰沙!你這毒婦竟也來了侨艾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤拓挥,失蹤者是張志新(化名)和其女友劉穎唠梨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侥啤,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡当叭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愿棋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片科展。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糠雨,靈堂內(nèi)的尸體忽然破棺而出才睹,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布琅攘,位于F島的核電站垮庐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坞琴。R本人自食惡果不足惜哨查,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剧辐。 院中可真熱鬧寒亥,春花似錦、人聲如沸荧关。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忍啤。三九已至加勤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同波,已是汗流浹背鳄梅。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留未檩,地道東北人戴尸。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像讹挎,于是被迫代替她去往敵國和親校赤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容