编者按

有很多客户问我们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模块相关推荐

  1. ajax异步获取数据后动态向表格中添加数据的页面

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 [html] view plaincopyp ...

  2. ajax异步获取数据后动态向表格中添加数据(行)

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 [html] view plaincopyp ...

  3. JavaScript动态向表格添加数据

    利用javascript ,动态向表格中添加数据 1. 首先先写出表格的表头和主干部分 <table width="600" border="1" cel ...

  4. 1.4_22 Axure RP 9 for mac 高保真原型图 - 案例21【中继器 - 入门2】添加数据

    相关链接 目录 Axure中文学习网 AxureShop AxureShop-QA 案例目标  1. 了解 添加数据 的实现方式  2. 掌握 自增id 的实现方式  3. 掌握 在视图中显示 操作 ...

  5. Layui框架下:JS中根据后台查询到的数据动态往div中ul里面动态添加li

    Layui框架下:JS中根据后台查询到的数据动态往div中ul里面动态添加li 先建立好一个div和ul JS代码: $(function () { layui.admin.req({ url: _s ...

  6. jsp ajax动态添加数据,jquery Ajax实现Select动态添加数据

    jquery Ajax实现Select动态添加数据,具体内容如下 1.背景 最近在工作中,遇到了一个关于select的问题.一般情况下,select下拉框中的数据都是固定的或者直接在jsp中读取列表值 ...

  7. Asp.net(asp,jsp)+JavaScript动态实现添加数据行

    在应用程序的开发中,有些输入信息是动态的,比如我们要注册一个员工的工作经历,比如下图 如果做成死的,只能填写三个,如果是四个呢?或者更多呢,那不是添加不上去了吗,所以这样固然不好,我们可以用动态添加表 ...

  8. JS向表格里添加数据

    题目: 1) 定义一个Student对象, 该对象有sname.age.sex.nickname.hobby几个属性 2) 构建数据,将班里所有学生的信息创建成对应的Student对象, 并将这些St ...

  9. 【javascript 动态添加数据到 HTML 页面】

    今天简单的学习了一下有关对象字面量的定义和 javascript 如何取出对象字面量的值的知识,javascript 动态添加数据到 HTML 页面的问题. [学习目标]有如下的一组数据通过 Ajax ...

最新文章

  1. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置填充色)实战
  2. 平面设计要掌握的实用技巧
  3. LinkedList总结+数组栈Stack
  4. 7.python字符串-内置方法分析
  5. c语言怎样存放学生信息,C语言共用体存放学生信息
  6. android中的progressbar,Android中ProgressBar用法简单实例
  7. 年会活动现场抽奖签到互动小程序开发制作
  8. iphone7字体风格怎么改_苹果7怎么更改字体样式 苹果手机换好看的字体
  9. 腾讯服务器鉴黄系统,腾讯云智能鉴黄系统
  10. Nginx 配置多个SSL域名指向不同端口
  11. WPSOffice双面文档打印边距设置技巧(转)
  12. go官网打不开,下载地址https://golang.google.cn/
  13. PAT甲级 1094 最大的一代
  14. html怎么导入flash视频,DW如何在网页中插入Flash视频?
  15. canvas的雨滴特效
  16. Linux 查看进程的几个命令
  17. luoguP1456 Monkey King
  18. 不符合正态分布的配对数据也有自己的统计方法。
  19. java输出五行十一列星星_星是什么意思 星字五行属什么
  20. 终极合体!谷歌大脑DeepMind正式联姻,1+1>OpenAI?

热门文章

  1. 虚拟主机1服务器,虚拟主机1服务器
  2. python pip国内源_【Python】设置pip源为国内源及简单操作
  3. iOS程序的启动过程介绍
  4. 批量删除文件名中的相同文字
  5. 以太坊开发 发行代币的增发功能 并实现转到钱包 和买卖的功能
  6. 插上翅膀,让Excel飞起来——xlwings(一)
  7. Titanic数据分析
  8. Elasticsearch5.X IN Windows 10 系列文章(1)
  9. Laravel 有哪些核心的内容?
  10. # 20145220《信息安全系统设计基础》第1周学习总结