NJet支持使用json格式的配置文件了
简介
目前NJet的配置文件与Nginx的配置文件格式相同。这种配置文件的格式对我们阅读比较友好。但是对一些自动化配置的需求来说,处理起来就很困难。为了以后能够对NJet的配置通过自动化工具来进行维护,NJet增加了对json格式配置文件的支持。目前这种支持是很基本的,只是支持主配置文件为json格式,里面include的文件的格式还是与之前相同。
json格式
目前NJet支持的json文件的配置格式如下,参考了开源项目https://github.com/nginxinc/crossplane中的格式,并做了一些修改。
最外层
parsed的内容是一个数组,数组的每一项都是一个对象,这个对象对应着一条NJet命令,或者对应着一个NJet的block。
{
"parsed":[
{},
...
{} //每一个obj对应一条cmd或一个block
],
"file": "/usr/local/njet/njet.conf" // 这是对应原有格式的配置文件,类似于description
}
一条指令
一条指令中包含两个键值,cmd为一个字条串,对应的指令的名称,args是一个数组,对应指令中的具体参数。
{
"cmd": "error_log",
"args": [
"logs/error.log",
"debug"
]
},
如果args为空,表明不需要参数
一个block
一个block中,有三个键值,其中cmd和args的含义与上面的指令是相同的,增加的block键值对应的是一个数组,数组的每一项又对应着一条指令或一个block。
{
"cmd": "events",
"args": [],
"block": [ //里面又是 obj 数组,可以是cmd 或 block
{
"cmd": "worker_connections",
"args": [
"102400"
]
}
]
},
block格式中有一些例外,就是 xxx_by_lua_block,这些block的格式与上面的通用格式不同,其block对应的数组中只有一个obj, obj的格式为{“code": “lua_code”}。
{
"cmd": "access_by_lua_block",
"args": [],
"block": [
{
"code": "\n local ac=require(\"api_gateway.access.control\")\n local access=ac.new(\"/api_gateway\")\n access:check()\n "
}
]
},
实例
下面是一个server的配置
server {
listen 8443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers AES128-SHA;
ssl_certificate certs/rsa.cer;
ssl_certificate_key certs/rsa.pem;
location / {
return 200 "8443 ok";
}
location /api_gateway {
access_by_lua_block {
local ac=require("api_gateway.access.control")
local access=ac.new("/api_gateway")
access:check()
}
content_by_lua_block {
local api_gateway=require("api_gateway")
api_gateway.main()
}
}
}
对应的json配置
{
"cmd": "server",
"args": [
],
"block": [
{
"cmd": "listen",
"args": [
"8443",
"ssl"
]
},
{
"cmd": "ssl_protocols",
"args": [
"TLSv1",
"TLSv1.1",
"TLSv1.2",
"TLSv1.3"
]
},
{
"cmd": "ssl_ciphers",
"args": [
"AES128-SHA"
]
},
{
"cmd": "ssl_certificate",
"args": [
"certs/rsa.cer"
]
},
{
"cmd": "ssl_certificate_key",
"args": [
"certs/rsa.pem"
]
},
{
"cmd": "location",
"args": [
"/"
],
"block": [
{
"cmd": "return",
"args": [
"200",
"8443 ok"
]
}
]
},
{
"cmd": "location",
"args": [
"/api_gateway"
],
"block": [
{
"cmd": "access_by_lua_block",
"args": [
],
"block": [
{
"code": "\n local ac=require(\"api_gateway.access.control\")\n local access=ac.new(\"/api_gateway\")\n access:check()\n "
}
]
},
{
"cmd": "content_by_lua_block",
"args": [
],
"block": [
{
"code": "\n local api_gateway=require(\"api_gateway\")\n api_gateway.main()\n "
}
]
}
]
}
]
}
使用
NJet从3.3版本开始支持json格式的配置文件,json配置文件的使用与之前NJet的启动方式相同,在解析时,NJet会先检查配置文件是否为json格式,并依据文件格式来执行相应的解析操作
./sbin/njet -p . -c conf/njet_conf.json
后续开发内容
- 可以支持json与njet现有配置文件之间的互相include,或者增加一个指令include_json。
- 支持对指定位置配置的查找,更新等。
- 对现在的动态配置API进行适配,能够实时更新全量配置

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
开源隐私计算SecretFlow|基于同态的隐私信息检索协议-SealPIR介绍
打开链接点亮社区Star,照亮技术的前进之路。 每一个点赞,都是社区技术大佬前进的动力 Github 地址: https://github.com/secretflow/secretflow 隐私信息检索(Private information retrieval PIR)也称为隐匿查询或匿踪查询,在医疗、股票、金融、社交等领域中都有大量应用场景。 近年来PIR技术研究逐渐丰富,行业对应用PIR实现隐私保护的呼声也随之高涨。 引言 [SealPIR][1]是微软开源的PIR实现,实现了2018年发表在IEEE S&P的论文[ACLS18][2]中的PIR方案。论文题目《PIR with Compressed Queries and Amortized Query Processing》已经包含了两个主要的贡献点: 对查询进行了压缩,通信量降低了274倍; 通过概率批量编码(probabilistic batch codes PBCs)可以同时执行多个查询,分摊查询处理的开销。 在近年的PIR协议研究中,特别是基于HE的PIR协议有很多进展,且大多数都是和SealPIR进行对比,...
-
下一篇
造工具的 vs 用工具的,聊聊 AI Coding 真实体验
AI 写代码越来越火,你用它了吗? 不知道你是不是也跟我一样,生成代码的时候,简直爽到飞起,调试的时候又很崩溃,甚至想砸键盘。 还有一个念头时不时在脑子里打转:再这样下去,我是不是要被 AI 替代了? 我们不得不承认,AI Coding 已经真真切切地走进我们的日常。无论是代码补全、整段生成,还是调试纠错、重构优化,AI 都在重新定义我们怎么写代码、怎么理解代码。 但工具越强大,就越要冷静想想: AI 写出来的代码到底靠不靠谱?它的天花板在哪儿? 它是在帮我们变得更强大,还是让我们的编程能力退化? 当前 AI Coding 产品形态有哪些?哪一种会最终胜出? 作为开发者,要怎么跟 AI 配合,而不是某天被它取代? 以后的编程,会变成什么样? 在这场 AI 编程的浪潮中,有两种声音,或许你也想听一听:一种是造工具的人,他们决定 AI 怎么工作;另一种是天天用工具的人,他们在真实项目中摸爬滚打、反馈体验。 9 月 23 日晚,开源中国 OSCHINA 《数智漫谈》直播栏目特意请来了不同立场的专家:一边是 AI Coding 工具的创造者,另一边是深度实战用户,让他们坐下来,来一场关于未来A...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装