js如何动态向 fileaddress: [fromurl]添加数据_N+增强能力系列(3) | 动态KV模块
編者按
有很多客戶問(wèn)我們NGINX商業(yè)版與開源版本到底有什么區(qū)別,在官方網(wǎng)站有一個(gè)對(duì)比列表,但看完之后感覺(jué)好像還是沒(méi)有g(shù)et到其增強(qiáng)的精髓。為了更好的讓大家了解NGINX Plus增強(qiáng)的能力及其應(yīng)用場(chǎng)景,特編發(fā)《NGINX Plus增強(qiáng)能力系列專題》。本系列一共包含10篇內(nèi)容,為了精簡(jiǎn),我們沒(méi)有包含那些顯而易見的增強(qiáng)例如dashboard,而是更聚焦商業(yè)版本的關(guān)鍵能力與場(chǎng)景。本專題內(nèi)容由數(shù)位專家參與。
NGINX Plus增強(qiáng)能力系列專題目錄:
- 視頻直播HLS與RTMP
- 代理緩存狀態(tài)統(tǒng)計(jì)與清理
- 動(dòng)態(tài)KV模塊
- NGINX實(shí)現(xiàn)動(dòng)態(tài)黑白名單訪問(wèn)控制
- 主動(dòng)健康檢查
- NGINX集群
- JWT認(rèn)證
- API接口
- 會(huì)話級(jí)log記錄
- http_upstream與stream_upstream
- 下面我們就進(jìn)入《NGINX Plus增強(qiáng)能力系列專題》的第二篇“動(dòng)態(tài)KV模塊”,作者林健。
林健
F5 金融行業(yè)資深技術(shù)顧問(wèn)
應(yīng)用交付領(lǐng)域從業(yè)12年有余,職業(yè)生涯前期專注于系統(tǒng)開發(fā)數(shù)據(jù)庫(kù)調(diào)優(yōu),現(xiàn)熱衷于coding,主持Ansible/K8S/Spring/BIG-IQ等多個(gè)F5專題。具備豐富編程以及軟件化相關(guān)知識(shí),對(duì)技術(shù)趨勢(shì)有獨(dú)立見解,成功幫助客戶實(shí)施基于F5產(chǎn)品的應(yīng)用多中心部署方案,多容器集群解決方案。致力于部署創(chuàng)新性項(xiàng)目,充分發(fā)揮F5技術(shù)優(yōu)勢(shì)打造下一代IT以及軟件架構(gòu)。擁有F5 101-304全系列產(chǎn)品認(rèn)證證書。
動(dòng)態(tài)KV模塊
NGINX KV模塊,全稱ngx_stream_keyval_module/nginx_http_keyval_module,是nginx plus的商業(yè)化模塊,主要實(shí)現(xiàn)為可以通過(guò)API進(jìn)行管理的內(nèi)部可持久化kv存儲(chǔ)。
1. 使用KV模塊的基本方法
步驟一:
需要建立一個(gè)http 的server,在server中配置一個(gè)使用api write = on指令的location,作為API接口的地址,類似如下:
如只是通過(guò)njs進(jìn)行使用kv,類似F5的table命令,此時(shí)無(wú)需該配置。
步驟二:
使用keyval_zone命令聲明一個(gè)kv zone,該命令格式為
請(qǐng)注意keyval_zone的上下文為http和stream,不要寫在server中
參數(shù)中其中name為該zone的名稱,size為大小,這兩項(xiàng)為必須輸入項(xiàng)目
以下為可選項(xiàng)目
State:持久化配置的本地文件,請(qǐng)注意如果修改了nginx的配置,然后運(yùn)行重啟,有可能會(huì)由于修改后的配置和該文件內(nèi)容不匹配造成重啟失敗,比如原類型為string,后修改為ip,但是該文件還是string,此時(shí)會(huì)報(bào)錯(cuò)。
Timeout:存儲(chǔ)在kv中的key pair保存時(shí)間,其格式為10m(10分鐘),60s(60秒),在超過(guò)該時(shí)間后,記錄失效,在通過(guò)API獲取的時(shí)候無(wú)法看到該數(shù)值,可以在state文件中找到expire字段,每條記錄的該字段可以通過(guò)api重寫。
Type:1.17.1版本以上可用,包括下面的可選值
注意此處的type是指key的type步驟三:
在具體的業(yè)務(wù)配置中使用keyval命令,映射目標(biāo)變量值為kv中的對(duì)應(yīng)值。使用命令為keyval
其中key為輸入變量,也就是在kv中的查找key值,$variable為輸出變量,該命令上下文也是http。
2. 如何添加,修改,刪除KV中的內(nèi)容:
- API方式
使用nginx的api的rest接口,向?qū)?yīng)的zone對(duì)象post,put,delete,類似如下
新創(chuàng)建一個(gè)zone
curl -X POST -d '{"linjian":"se","xufeng":"manager","linjing":"sa"}' http://localhost/api/1/http/keyvals/my_test_zone
修改其中一個(gè)key對(duì)應(yīng)的value:
curl -X PATCH -d '{"linjian":"FSE"}' http://localhost/api/1/http/keyvals/my_test_zone
刪除也是使用PATCH方法,只要設(shè)定其value為null即可,如下:
curl -X PATCH -d '{"linjian":null}' http://localhost/api/1/http/keyvals/my_test_zone
可以在patch方法中使用expire參數(shù),修改kv對(duì)的超時(shí)時(shí)間,此時(shí)會(huì)override在配置文件中的zone timeout值。
類似:
{"key1" : "value1","key2" : "value2","key3" : {"value" : "value3","expire" : 30000} }需要注意,如果NGINX+是在一個(gè)sync集群中,刪除操作只會(huì)在當(dāng)前目標(biāo)節(jié)點(diǎn)生效。
使用DELETE方法刪除整個(gè)kv zone的內(nèi)容
curl -X DELETE http://localhost/api/1/http/keyvals/my_test_zone
同樣,刪除整個(gè)zone的操作也只在當(dāng)前目標(biāo)節(jié)點(diǎn)生效
NJS方式:
用一個(gè)官方例子說(shuō)明:
js_include js_requests.js;js_set $num_requests num_requests;keyval_zone zone=foo:10m; keyval $remote_addr $foo zone=foo;log_format bar '$remote_addr [$time_local] $num_requests'; access_log logs/access.log bar; server {listen 8000;location / {root html;} }js_requests.js:
function num_requests(r) {var n = r.variables.foo;n = n ? Number(n) + 1 : 1;r.variables.foo = n;return n; }在上述例子在kv中記錄每個(gè)ip地址的請(qǐng)求總數(shù),njs修改kv內(nèi)容需要使用一個(gè)nginx配置中的變量,使用<r.variables.變量名>進(jìn)行讀取和修改,此后無(wú)需額外的set操作,該值會(huì)直接寫入對(duì)應(yīng)的keyval zone,也可以使用njs的subrequest訪問(wèn)本機(jī)的API uri進(jìn)行操作。
3. Keyval模塊部署場(chǎng)景:
Keyval模塊本身只是一個(gè)可以被api控制的kv,主要用途是根據(jù)動(dòng)態(tài)條件執(zhí)行后續(xù)操作,在某些場(chǎng)合可以實(shí)現(xiàn)數(shù)據(jù),但是由于nginx配置本身并不是編程開發(fā)語(yǔ)言,缺少運(yùn)算功能,在配置文件中用無(wú)法用原生的nginx配置在kv中添加數(shù)據(jù),在很多一些場(chǎng)合建議配合njs模塊可以更好的效果,注意在1.15.1版本后,njs模塊可以在運(yùn)行時(shí)動(dòng)態(tài)
在條件場(chǎng)景下需要結(jié)合其他模塊所提供的變量實(shí)現(xiàn)映射才可以發(fā)揮功效,在一些場(chǎng)合結(jié)合map指令對(duì)kv值進(jìn)行進(jìn)一步的分類
官方方案包含:
- Dynamic Bandwidth Limits Using the NGINX Plus Key-Value Store
https://www.nginx.com/blog/dynamic-bandwidth-limits-nginx-plus-key-value-store/
- Dynamic A/B Testing with NGINX Plus
https://www.nginx.com/blog/dynamic-a-b-testing-with-nginx-plus/
- Dynamic IP Blacklisting with NGINX Plus and fail2ban
https://www.nginx.com/blog/dynamic-ip-blacklisting-with-nginx-plus-and-fail2ban/
動(dòng)態(tài)SSL證書:
https://gist.github.com/nginx-gists/7879b97e29b3d23fc72daef5591af74c
總結(jié)
以上是生活随笔為你收集整理的js如何动态向 fileaddress: [fromurl]添加数据_N+增强能力系列(3) | 动态KV模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2019年安徽省模块七满分多少_艺考资讯
- 下一篇: vue动态获取元素距离页面顶部的高度_V