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高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 Javascript
使用Java实现简单的server/client回显功能的方法介绍
May 03 Javascript
js实现日期级联效果
Jan 23 Javascript
获取中文字符串的实际长度代码
Jun 05 Javascript
javascript性能优化之DOM交互操作实例分析
Dec 12 Javascript
Bootstrap基本组件学习笔记之进度条(15)
Dec 08 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
借助node实战JSONP跨域实例
Mar 30 Javascript
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
H5图片压缩与上传实例
Apr 21 Javascript
JavaScript实现雪花飘落效果
Dec 27 Javascript
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
编译问题
2006/10/09 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
微信支付的开发流程详解
2016/09/13 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
JavaScript触发器详解
2007/03/10 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
javascript折半查找详解
2015/01/26 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
js返回顶部实例分享
2016/12/21 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
Django中信号signals的简单使用方法
2019/07/04 Python
AUC计算方法与Python实现代码
2020/02/28 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
python中round函数保留两位小数的方法
2020/12/04 Python
项目经理任命书范本
2014/06/05 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python