java解析nginx配置文件
最近项目中需要解析nginx配置文件,几经查找在github上找到nginx-java-parser工具,项目地址:https://github.com/odiszapc/nginx-java-parser
解析nginx.conf过程可以参考该项目的README.md,不知道调用哪些方法来完成功能,可以查看相应的源码即可找到。下面给出我的解析demo。
2 3 import com.github.odiszapc.nginxparser.NgxBlock; 4 import com.github.odiszapc.nginxparser.NgxConfig; 5 import com.github.odiszapc.nginxparser.NgxEntry; 6 import com.github.odiszapc.nginxparser.NgxParam; 7 8 import java.io.File; 9 import java.util.*; 10 import java.util.regex.Matcher; 11 import java.util.regex.Pattern; 12 13 public class TestParase { 14 15 16 public static void main(String args[]){ 17 try { 18 // 1.读取指定的文件夹下的配置文件 **:\work\document\nginxconf\test 19 ArrayList<File> filesArray=TestParase.getFiless("*:\\work\\document\\nginxconf\\test\\"); 20 // 2.循环解析文件夹下的conf配置文件 21 for(int i=0;i<filesArray.size();i++){ 22 String filePath=filesArray.get(i).getPath(); 23 TestParase.paraseNginx(filePath); 24 } 25 26 } catch (Exception e) { 27 e.printStackTrace(); 28 } 29 30 31 } 32 33 public static void paraseNginx(String filePath) throws Exception{ 34 35 NgxConfig conf=NgxConfig.read(filePath); 36 // 解析ngxin配置文件中的params 37 NgxParam workers = conf.findParam("worker_processes"); 38 workers.getValue(); 39 System.out.println("workers:"+workers.getValue()); 40 41 // 获取http下面的upstream block 42 List<NgxEntry> rtmpServers = conf.findAll(NgxConfig.BLOCK, "http", "upstream"); 43 Set<String> noRepeatRtmpServers=new HashSet<String>(); 44 for (NgxEntry entry : rtmpServers) { 45 // 获取upstream下的所有的server 46 List<NgxEntry> entryParamList=((NgxBlock)entry).findAll(NgxConfig.PARAM,"server"); 47 for(NgxEntry entryParam : entryParamList){ 48 String str=entryParam.toString(); 49 String[] enrryParamStrArr=entryParam.toString().split(" "); 50 noRepeatRtmpServers.add(enrryParamStrArr[1]); 51 } 52 } 53 for(String noRepeatRtmpServer:noRepeatRtmpServers){ 54 System.out.println(noRepeatRtmpServer); 55 } 56 57 // 获取http下的server 58 List<NgxEntry> locationServers = conf.findAll(NgxConfig.BLOCK, "http", "server","location"); 59 Set<String> noRepeatLocationServers=new HashSet<String>(); 60 for (NgxEntry entry : locationServers) { 61 NgxParam locationParam=((NgxBlock)entry).findParam("proxy_pass"); 62 if(locationParam==null){ 63 continue; 64 } 65 String[] enrryParamStrArr=locationParam.toString().split(" "); 66 String enrryParamStr=enrryParamStrArr[1]; 67 String[] enrryParamStrArry=enrryParamStr.split("/"); 68 noRepeatRtmpServers.add(enrryParamStrArry[2]); 69 } 70 //循环遍历 noRepeatRtmpServers 71 for(String noRepeatRtmpServer:noRepeatRtmpServers){ 72 System.out.println(noRepeatRtmpServer); 73 } 74 } 75 public static ArrayList<File> getFiless(String path) throws Exception{ 76 ArrayList<File> fileList=new ArrayList<File>();//目标集合fileList 77 File file =new File(path); 78 if(file.isDirectory()){ 79 File[]files=file.listFiles(); 80 for(File fileIndex:files){ 81 if(fileIndex.isDirectory()){ 82 TestParase.getFiless(fileIndex.getPath());//如果这个文件是目录,则进行递归搜索 83 }else{ 84 fileList.add(fileIndex);//如果文件是普通文件,则将文件句柄放入集合中 85 } 86 } 87 } 88 return fileList; 89 } 90 91 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了