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教程
Jun 09 Javascript
JQuery 图片延迟加载并等比缩放插件
Nov 09 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
jQuery getJSON 处理json数据的代码
Jul 26 Javascript
CSS图片响应式 垂直水平居中
Aug 14 Javascript
Jquery树插件zTree实现菜单树
Jan 24 Javascript
Angular 输入框实现自定义验证功能
Feb 19 Javascript
详解如何在Vue项目中导出Excel
Apr 19 Javascript
微信小程序的mpvue框架快速上手指南
May 15 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
Feb 04 Javascript
JavaScript观察者模式原理与用法实例详解
Mar 10 Javascript
vue 数据双向绑定的实现方法
Mar 04 Vue.js
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版本实现代码
2012/09/15 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
Javascript 实用小技巧
2010/04/07 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python如何实现复制目录到指定目录
2020/02/13 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
制药工程专业毕业生推荐信
2013/12/24 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
销售会计岗位职责
2014/03/15 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
如何写观后感
2015/06/19 职场文书