博学笃行·盛德日新

NginxConfigFormatterGo_nginx配置文件格式化工具介绍


技术

软件地址: https://github.com/rwx------/nginxConfigFormatterGo
码云地址: https://gitee.com/RickieL/nginxConfigFormatterGo

前言

在2018年的时候, 看到了一个nginx配置文件格式化工具, https://github.com/1connect/nginx-config-formatter , 当时自己对服务器上的那些乱七八糟的nginx配置文件实在是忍无可忍, 同时也看到网络上也有很多推荐这个工具, 就开始用起来了. 使用过程中, 发现了一些bug, 当时在github上进行了反馈, 后面干脆是自己动手尝试着去修复, 然后提交了pull request (https://github.com/1connect/nginx-config-formatter/pull/6) , 没想到被软件的原作者接收了, 甚是开心, 第一次为开源做出了自己的贡献. 还有一个pull request(https://github.com/1connect/nginx-config-formatter/pull/8), 因为和别人的提交冲突的原因, 一直没有合并, 也就一直搁置了2年的时间.

用go重写

最近在学go, 一直也没找到很好的使用场景, 就想起了这nginx格式化工具, 不如用go重新写一遍吧.

用go重写有几个优点:

  1. 根据不同的系统进行打包二进制文件, 在服务器上直接使用.
  2. 不再需要每个服务器上安装python3, 尤其是centos默认的都是python2的环境.
  3. 执行的效率更高.
  4. 对go的使用更加熟练了.

所做的改进

  1. 支持设置缩进的空格数.(默认4个空格缩进)
  2. 支持更多的文件字符集
  3. 修复了多行配置的分解问题(这个在原python项目中没有修复)
  4. 修复了"'的配置问题(原python项目中只要匹配到", '就算是在引号内的内容, 前一个是 ", 后一个 ' 时, 会被认为是引号外. 还有在 注释中的" '也会被解析, 造成引号内的内容错乱)
  5. 不必对${variable} 及 rewrite 中的 {}进行特殊处理, 因为nginx配置文件的语法中, 这些时候的花括号都需要被引号包围, 不然语法解析通不过(指 nginx -t ).
  6. 减少了一些不必要的重复处理, 从原来的7次全量读写优化到6次全量读写.

后记

很庆幸的是, 我的这个go开发的nginx配置文件格式化工具(nginxConfigFormatterGo)还是得到了原python项目作者的star, 得到认可的感觉还是很不错的.

一直以来有个开源梦, 想要开发出一个软件, 能够体现自己作为程序员作为IT人士的价值, 能够给人们带来有用的东西. 也希望自己能留下一些东西, 得到这个世界的认同和认可, 我想大多数开源的目的都有这些原因吧.

希望这个nginx配置软件能给大家带来方便. 请大家随意取用.

软件地址: https://github.com/rwx------/nginxConfigFormatterGo
码云地址: https://gitee.com/RickieL/nginxConfigFormatterGo

评论