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 focus和blur事件的应用详解
Jan 26 Javascript
JS的get和set使用示例
Feb 20 Javascript
删除条目时弹出的确认对话框
Jun 05 Javascript
Jquery Post处理后不进入回调的原因及解决方法
Jul 15 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
深入理解js promise chain
May 05 Javascript
js实现随机抽选效果、随机抽选红色球效果
Jan 13 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
javaScript 连接打印机,打印小票的实例
Dec 29 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
Jan 24 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
解决layui表格的表头不滚动的问题
Sep 04 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
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
Python标准库os.path包、glob包使用实例
2014/11/25 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
python 异或加密字符串的实例
2018/10/14 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
PyQt5 多窗口连接实例
2019/06/19 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
python 如何设置守护进程
2020/10/29 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
客服主管岗位职责
2013/12/13 职场文书
商场主管竞聘书
2014/03/31 职场文书
城管大队整治方案
2014/05/06 职场文书
环保宣传标语
2014/06/12 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
检讨书怎么写
2015/01/23 职场文书
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL