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 相关文章推荐
用jquery实现下拉菜单效果的代码
Jul 25 Javascript
jquery中ajax调用json数据的使用说明
Mar 17 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
Jun 08 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
Dec 01 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
浅析JS动态创建元素【两种方法】
Apr 20 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
JS实现根据详细地址获取经纬度功能示例
Apr 16 Javascript
vue+element实现表单校验功能
May 20 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
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
python使用多线程不断刷新网页的方法
2015/03/31 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
python logging.info在终端没输出的解决
2020/05/12 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
小学生防溺水广播稿
2014/01/12 职场文书
世界读书日的活动方案
2014/08/20 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
校本研修个人总结
2015/02/28 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
python实现高效的遗传算法
2021/04/07 Python