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 相关文章推荐
JAVASCRIPT 对象的创建与使用
Mar 09 Javascript
jquery获取table中的某行全部td的内容方法
Mar 08 Javascript
使用documentElement正确取得当前可见区域的大小
Jul 25 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
node.js中Socket.IO的进阶使用技巧
Nov 04 Javascript
jQuery实现简单的日期输入格式化控件
Mar 12 Javascript
一种新的javascript对象创建方式Object.create()
Dec 28 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
jQuery 动态粒子效果示例代码
Jul 07 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目录操作实例代码
2014/02/21 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
java必学必会之static关键字
2015/12/03 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
django之常用命令详解
2016/06/30 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
python 随机森林算法及其优化详解
2019/07/11 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
Django如何使用redis作为缓存
2020/05/21 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
淘宝好评语大全
2014/05/05 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
员工辞职信怎么写
2015/02/27 职场文书
立春观后感
2015/06/18 职场文书
2016年党建工作简报
2015/11/26 职场文书
《詹天佑》教学反思
2016/02/20 职场文书