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