我想找到一种方法来解析 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
}
我想生成这样的图表(当将鼠标移到流程框上时,您会看到注释,正在调用哪些指令......):
据我所知 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/