主要是通过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); //
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); //
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); //

node解析修改ngix配置文件的更多相关文章

  1. Golang读取并修改非主流配置文件

    今天工作中碰到的问题,要求修改此配置文件,没看出来是什么格式,用了下面的思路: mysql { # If any of the files below are set, TLS encryption ...

  2. 并发之AQS原理(二) CLH队列与Node解析

    并发之AQS原理(二) CLH队列与Node解析 1.CLH队列与Node节点 就像通常医院看病排队一样,医生一次能看的病人数量有限,那么超出医生看病速度之外的病人就要排队. 一条队列是队列中每一个人 ...

  3. asp.net中为什么修改了配置文件后我们不需要重启IIS

    本文转载:http://blog.itpub.net/12639172/viewspace-659819/ 大家知道,asp.net中,如果我们修改了配置文件只要把它保存之后,就会立刻反应到程序中, ...

  4. Spark添加/更改集群节点需要修改的配置文件

    笔记:在配置好了spark后,如果需要添加/删除一个结点需要修改如下配置文件 cd $HADOOP/etc/hadoop 进入hadoop配置文件夹下 修改 slaves,将对应的节点添加/删除 修改 ...

  5. sublime text3修改默认配置文件是失败的解决方法

    如果你修改sublime text3的默认配置文件Preferences.sublime-settings失败,现实的错误信息如下图: 其实根据提示信息就好找问题出在哪里了:权限 要想成功的修改默认配 ...

  6. Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

  7. AWS中国EC2 公网IP登录免pemKEY修改shh 配置文件

    个人使用记录 1:KEY 授权 chmod 400 VPN.pem 2:连接 ssh -i "VPN.pem" ubuntu@ec2-54-183-119-93.us-west-1 ...

  8. docker下修改mysql配置文件

    原文:docker下修改mysql配置文件 版权声明:本文为博主原创文章,转载注明地址:http://blog.csdn.net/wang704987562 https://blog.csdn.net ...

  9. 修改gitlab配置文件指定服务器ip和自定义端口:

    修改gitlab配置文件指定服务器ip和自定义端口: vim /etc/gitlab/gitlab.rb gitlab-ctl reconfiguregitlab-ctl restart 查看与rpm ...

随机推荐

  1. quota磁盘配额

    一.什么是磁盘配额 磁盘配额从字面意思上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思,所以总的来说就是限制用户对磁盘空间的使用量.因为Linux是多用户多任务的操作系统,许多人公用磁 ...

  2. Linux中的defunct进程(僵尸进程)

    一.什么是defunct进程(僵尸进程)?在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态 ...

  3. python基础06--文件操作

    1.1 文件操作 1.只读(r,rb)     rb以bytes方式读文件 只写(w,wb) 追加(a,ab) r+ 读写 w+ 写读 a+  追加写读 以什么编码方式储存的文件,就用什么编码方式打开 ...

  4. React Hooks --- useState 和 useEffect

    首先要说的一点是React Hooks 都是函数,使用React Hooks,就是调用函数,只不过不同的Hooks(函数)有不同的功能而已.其次,React Hooks只能在函数组件中使用,函数组件也 ...

  5. 7 静态分析Android

    静态分析两种方式: 1. 阅读反汇编的Dalvik字节码:使用IDA 分析dex文件或baksmali反编译的smali文件 2. 阅读反汇编的Java源码:使用dex2jar生成jar文件,用jd- ...

  6. PB调用C#编写的Dll类库

    在c# 中编写com组件,供PB调用实例 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意. c#中新建类库 类库类型为通用类库,项目名为AddC ...

  7. Java开发环境之Svn

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾肆章:Svn安装教程 1)去官网下载TortoiseSVN安装包 https://tortoisesvn.net/ 2) ...

  8. 机器学习笔记4:SVM支持向量积的推导过程

    内容来自:https://github.com/GreedyAIAcademy/Machine-Learning 最初 支持向量机的目的:找到一条好的分割线 什么杨的分割线最好? 有最大间隔的分割线最 ...

  9. gitlab修改IP地址及仓库地址

    将IP修改为192.168.10.100,操作方法 . 先修改本地的IP地址 vim /etc/sysconfig/network-scripts/ifcfg-eth0TYPE=EthernetBOO ...

  10. Huffman Tree (哈夫曼树学习)

    WPL 和哈夫曼树 哈夫曼树,又称最优二叉树,是一棵带权值路径长度(WPL,Weighted Path Length of Tree)最短的树,权值较大的节点离根更近. 首先介绍一下什么是 WPL,其 ...