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 Prototype对象
Jan 07 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
Dec 17 Javascript
在JavaScript的正则表达式中使用exec()方法
Jun 16 Javascript
Bootstrap如何创建表单
Oct 21 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
vue axios 简单封装以及思考
Oct 09 Javascript
JSON生成Form表单的方法示例
Nov 21 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 Javascript
前端JavaScript大管家 package.json
Nov 02 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
js实现简单进度条效果
2020/03/25 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
跟老齐学Python之类的细节
2014/10/13 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python使用epoll实现服务端的方法
2018/10/16 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
信息专业个人的自我评价
2013/12/27 职场文书
学雷锋标语
2014/06/25 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
计算机教师工作总结
2015/08/13 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android