node解析修改nginx配置文件操作实例分析


Posted in Javascript onNovember 06, 2019

本文实例讲述了node解析修改nginx配置文件操作。分享给大家供大家参考,具体如下:

主要是通过nginx-conf这个工具。

git地址:https://github.com/tmont/nginx-conf

具体用法:

npm install -S nginx-conf 安装工具

var NginxConfFile = require('nginx-conf').NginxConfFile;
// 这个api提供了node读写conf文件的功能
NginxConfFile.create('/etc/nginx.conf', function(err, conf) {
 if (err) {
  console.log(err);
  return;
 }
// 通过_value的方式读取每一个配置的值
 console.log(conf.nginx.user._value); //www www
 console.log(conf.nginx.http.server.listen._value); //one.example.com
 //模块中有多个子模块,比如server中配置了多个location,通过数组下标的方式访问
 console.log(conf.nginx.http.server.location[3].root._value); // /spool/www
 //修改配置
 //create api是同步修改文件的,对于配置的修改和删除会同步反映到磁盘中
 conf.on('flushed', function() {
  console.log('finished writing to disk');
 });
 //listen to the flushed event to determine when the new file has been flushed to disk
 conf.nginx.events.connections._value = 1000;
 // 这个api的用途是当配置改变时不写到磁盘中
 conf.die('/etc/nginx.conf');
 conf.nginx.events.connections._value = 2000; //change remains local, not in /etc/nginx.conf
 // 将内存中的配置写到另一个文件中
 conf.live('/etc/nginx.conf.bak');
 // 强行将内存中的配置刷到磁盘中
 conf.flush();
 // 增加和移除指令 通过 _add 和 _remove
 conf.nginx.http._add('add_header', 'Cache-Control max-age=315360000, public');
 console.log(conf.nginx.http.add_header._value); //Cache-Control max-age=315360000, public
 conf.nginx.http._add('add_header', 'X-Load-Balancer lb-01');
 conf.nginx.http._add('add_header', 'X-Secure true');
 console.log(conf.nginx.http.add_header[0]._value); //Cache-Control max-age=315360000, public
 console.log(conf.nginx.http.add_header[1]._value); //X-Load-Balancer lb-01
 console.log(conf.nginx.http.add_header[2]._value); //X-Secure true
 conf.nginx.http._remove('add_header'); //removes add_header[0]
 conf.nginx.http._remove('add_header', 1); //removes add_header[1]
 //如果只有一个带有名称的指令,会被被展开成一个属性,通过数组下表访问的将是undefined
 console.log(conf.nginx.http.add_header._value); //X-Load-Balancer lb-01
 console.log(conf.nginx.http.add_header[0]); //undefined
 // 增加一个新的模块
 conf.nginx.http._add('server');
 conf.nginx.http.server._add('listen', '80');
 //that'll create something like this:
 /*
  server {
   listen 80;
  }
 */
 // 存在多个模块是通过数组方式访问
 conf.nginx.http._add('server');
 conf.nginx.http.server[1]._add('listen', '443');
 /*
  server {
   listen 80;
  }
  server {
   listen 443;
  }
 */
 // blocks with values:
 conf.nginx.http.server[1]._add('location', '/');
 conf.nginx.http.server[1].location._add('root', '/var/www/example.com');
 /*
  server {
   location / {
    root /var/www/example.com;
   }
  }
 */
 // lua blocks also work, but you can't put a mismatched "{" or "}" in a comment!
 conf.nginx.http.location._addVerbatimBlock('rewrite_by_lua_block', '{\n\
 ngx.say("this is a lua block!")\n\
 res = ngx.location.capture("/memc",\n\
  { args = { cmd = "incr", key = ngx.var.uri } }\n\
 )\n\
}');
});

此工具同样支持对注释的修改

// 读取use配置上的注释,以数组的方式返回
console.log(conf.nginx.events.use._comments.length); // 1
console.log(conf.nginx.events.use._comments[0]); // use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
// 删除注释
conf.nginx.events.use._comments.splice(0, 1);
// 添加注释
conf.nginx.event.use._comments.push('my new comment');
console.log(conf.nginx.events.use._comments.length); // 1
console.log(conf.nginx.events.use._comments[0]); //my new comment
// 修改注释
conf.nginx.event.use._comments[0] = 'updated';
console.log(conf.nginx.events.use._comments[0]); //updated

注意特殊情况

foo #comment
bar;
console.log(conf.nginx.foo._value); //bar
console.log(conf.nginx.foo._comments[0]); //comment
But if the comment comes after:
foo bar;
#comment
console.log(conf.nginx.foo._value); //bar
console.log(conf.nginx.foo._comments.length); //0

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
关于文本框的一些限制控制总结~~
Apr 15 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
Nov 12 Javascript
让table变成exls的示例代码
Mar 24 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
jQuery实现div横向拖拽排序的简单实例
Jul 13 Javascript
flexslider.js实现移动端轮播
Feb 05 Javascript
canvas绘制一个常用的emoji表情
Mar 30 Javascript
js实现点击按钮复制文本功能
Jul 20 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
jQuery实现穿梭框效果
Jan 19 jQuery
vuex实现像调用模板方法一样调用Mutations方法
Nov 06 #Javascript
vuex actions异步修改状态的实例详解
Nov 06 #Javascript
Windows上node.js的多版本管理工具用法实例分析
Nov 06 #Javascript
vue限制输入框只能输入8位整数和2位小数的代码
Nov 06 #Javascript
vuex存值与取值的实例
Nov 06 #Javascript
node省市区三级数据性能测评实例分析
Nov 06 #Javascript
vue计算属性无法监听到数组内部变化的解决方案
Nov 06 #Javascript
You might like
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
php生成gif动画的方法
2015/11/05 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
JS实现留言板功能
2017/06/17 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
JS实现手写parseInt的方法示例
2017/09/24 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
python3处理含有中文的url方法
2018/05/10 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Numpy的简单用法小结
2019/08/28 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
旅游网创业计划书
2014/01/31 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
《打电话》教学反思
2016/02/22 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL