c - 如何解析Nginx配置文件?

标签 c parsing nginx

我想找到一种方法来解析 nginx 配置文件,以便动态生成我将用作文档的图表。

nginx 配置文件语法如下所示(为了简洁起见,这个示例故意使用基本的,我管理的配置文件实际上要复杂得多):

location / {
   if (GET) {
      echo_exec @memcache;
   }
   if (POST) {
      echo_exec @application;
   }
}

location @memcache {
   # try to get content from cache
   if (notfound) {
       # fallback to application
       echo_exec @application;
   }
}
location @application {
   # forwarding request to application
}

我想生成这样的图表(当将鼠标移到流程框上时,您会看到注释,正在调用哪些指令......):

enter image description here

据我所知 nginx 配置文件语法是自定义的。我能够在 src/core/ngx_conf_file.c 内的源代码中找到解析器,如下所示:

        case ';':
        case '{':
            if (cf->args->nelts == 0) {
                ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                                   "unexpected \"%c\"", ch);
                return NGX_ERROR;
            }

            if (ch == '{') {
                return NGX_CONF_BLOCK_START;
            }

            return NGX_OK;

不幸的是,我对C一无所知,所以不知道如何重用该代码。

您知道 nginx 配置文件语法是否接近另一种已知的语法(该语法已存在解析器,我可以根据需要重复使用和调整)?

最佳答案

您可能想查看Config::Neat我刚刚在 GitHub 上发布了 Perl 模块。我在搜索用 Perl 编写的类似配置解析器时遇到了你的问题,但没有找到任何合适的。

Config::Neat 的灵感来自于 nginx 配置语法,尽管它不需要在每行末尾添加分号,并且还不支持同名的 block 。但尽管如此,它可能会作为您的起点。

关于c - 如何解析Nginx配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240422/

相关文章:

c - 在c中声明十六进制字符 'error: multi-character character constant'

java - 将对象序列化为 XML 并追加 1 天

java - 在java中解析xml字符串时出现问题

ubuntu - Nginx 重定向 301 非 ssl www 到 ssl www 无法正常工作

php - Docker 容器关闭脚本

c - 从链表中删除一个节点

C中malloc()的混淆,动态内存分配

c - Ubuntu 上的套接字(不允许操作)

jquery - 如何显示从 jQuery .ajax 帖子返回的 JSON

amazon-web-services - AWS ECS容器无法指定区域