【问题标题】:Any good way to programmatically change nginx config file from python?任何以编程方式从 python 更改 nginx 配置文件的好方法?
【发布时间】:2019-12-21 07:20:55
【问题描述】:

我有一个 python 脚本可以动态改变 nginx 配置文件 (nginx.conf)。由于 nginx 配置不是ini 格式,我目前使用一些正则表达式来解析和修改文件内容。是否存在以编程方式更改 nginx 配置的唯一方法或更好的方法?

【问题讨论】:

  • 为什么不使用模板来生成文件?
  • @Mart 我不生成它——我改变了现有的。脚本用于已经启动 nginx 并使用现有配置文件运行的现有服务器。我根据某些逻辑添加或删除项目。

标签: python nginx


【解决方案1】:
  1. https://www.npmjs.com/package/nginx-conf

  2. 您可以使用 PyNginxConfig 解析器http://code.google.com/p/pynginxconfig/source/browse/pynginxconfig.py#208 此实现与原始实现接近。

  3. 还有ServerMgr。 它不是真正的解析器,只允许基本映射。

  4. 最后但并非最不重要,实际上是第一个,因为基于 pyparsing:https://github.com/fatiherikli/nginxparser

    pip install git+https://github.com/fatiherikli/nginxparser.git

【讨论】:

  • pip install git+https://github.com/fatiherikli/nginxparser.git 安装nginxparser
【解决方案2】:

NGINX Inc 于 2017 年开始提供一个库,这是一种“将 NGINX 配置转换为 JSON 并返回的快速可靠的方法”。它被称为crossplan,您可以通过pip 获得它。

pip install crossplane

使用它,您可以将文件解析为 JSON、反序列化、操作、序列化回 JSON,然后转换回 NGINX 配置文件格式。

【讨论】:

    【解决方案3】:

    似乎存在一个augeas lens 至少支持一部分 nginx 配置文件语法。 Augeas 也有Python bindings

    【讨论】:

    • 使用 C 语言编写的库和 python 绑定来处理简单的文本文件 O_O 看起来有点矫枉过正。
    • 对于任何希望从 Python Augeas 以外的语言解析 nginx.conf 文件的人,除了 shell 工具外,还有 bindings for a number of other langauges。另外我的 2 美分 - Augeas 是最强大的解决方案,因为它提供了一个通用 API 来解析来自不同语言的许多 .conf 文件。 nginx 镜头目前仅限于 nginx 配置语法的子集,但扩展起来相当简单。
    【解决方案4】:

    现在有nginx-conf,一个提供对 nginx 配置的编程访问的 NPM 模块。

    【讨论】:

    • OP 询问了有关 Python 的问题——为什么接受的答案建议使用 NPM (Javascript) 模块?
    • Answer 提供了 JavaScript,而不是作者要求的 Python。投反对票。
    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2023-03-31
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多