java conf_JAVA 解析、编辑nginx.conf详解

最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf

解析nginx.conf过程可以参考该项目的README.md

下面举个列子说明一下该如何编辑nginx.conf。

定义一个pojo

importcom.alibaba.fastjson.JSONArray;importcom.google.common.base.Strings;importlombok.Data;

@Datapublic classWebHost {private longid;privateString host;privateString protocol;privateString name;

}

1、添加nginx配置

1 public booleanaddWebToNginxConfig(WebHost webHost, String fileName) {2 if (webHost == null ||Strings.isNullOrEmpty(fileName)) {3 return false;4 }5 try{6 NgxConfig ngxConfig =NgxConfig.read(fileName);7 NgxBlock ngxBlockHttp = ngxConfig.findBlock("http");8 NgxBlock ngxBlockWeb = newNgxBlock();9 ngxBlockWeb.addValue("server");10 ngxBlockHttp.addEntry(ngxBlockWeb);11 if ("https".equals(webHost.getProtocol())) {12 NgxParam ngxParam = newNgxParam();13 ngxParam.addValue("listen 443 ssl");14 ngxBlockWeb.addEntry(ngxParam);15 ngxParam = newNgxParam();16 ngxParam.addValue(String.format("server_name %s", webHost.getHost()));17 ngxBlockWeb.addEntry(ngxParam);18

19 String virtualServerName =webHost.formatName();20 ngxParam = newNgxParam();21 ngxParam.addValue(String.format("ssl_certificate /etc/nginx/cert/%s.cert", virtualServerName));22 ngxBlockWeb.addEntry(ngxParam);23 ngxParam = newNgxParam();24 ngxParam.addValue(String.format("ssl_certificate_key /etc/nginx/key/%s.key", virtualServerName));25 ngxBlockWeb.addEntry(ngxParam);26 } else{27 NgxParam ngxParam = newNgxParam();28 ngxParam.addValue("listen 80");29 ngxBlockWeb.addEntry(ngxParam);30 ngxParam = newNgxParam();31 ngxParam.addValue(String.format("server_name %s", webHost.getHost()));32 ngxBlockWeb.addEntry(ngxParam);33 }34

35 NgxBlock ngxBlockLocation = newNgxBlock();36 ngxBlockLocation.addValue("location");37 ngxBlockLocation.addValue("/");38 NgxParam ngxParam = newNgxParam();39 ngxParam.addValue("proxy_pass http://backend_http");40 ngxBlockLocation.addEntry(ngxParam);41 ngxParam = newNgxParam();42 ngxParam.addValue("proxy_set_header Host $host");43 ngxBlockLocation.addEntry(ngxParam);44 ngxParam = newNgxParam();45 ngxParam.addValue("proxy_set_header X-Real-IP $remote_addr");46 ngxBlockLocation.addEntry(ngxParam);47 ngxParam = newNgxParam();48 ngxParam.addValue("proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for");49 ngxBlockLocation.addEntry(ngxParam);50 ngxBlockWeb.addEntry(ngxBlockLocation);51

52 String content = newNgxDumper(ngxConfig).dump();53 log.info("{}", content);54 return true;55 } catch(IOException e) {56 log.warn("write nginx.conf to file catch IOException!", e);57 }58 return false;59 }

添加结果示例:

user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1025;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;

keepalive_timeout 65;

#gzip on;

upstream backend_http {

server 1.1.1.1:80 weight=2;

server 2.2.2.2:80 weight=2;

}

upstream backend_https {

server 1.1.1.1:443 weight=2;

server 2.2.2.2:443 weight=2;

}

server {

listen 80;

server_name aaaa.com;

location / {

proxy_pass http://backend_http;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

server {

listen 443 ssl;

server_name eeee.com;

ssl_certificate /etc/nginx/cert/eeee.com.https.cert;

ssl_certificate_key /etc/nginx/key/eeee.com.https.key;

location / {

proxy_pass http://backend_http;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

}

2、删除nginx配置

1 public booleandeleteWebFromNginxConfig(String host, String fileName) {2 if (Strings.isNullOrEmpty(host) ||Strings.isNullOrEmpty(fileName)) {3 return false;4 }5 try{6 NgxConfig ngxConfig =NgxConfig.read(fileName);7 NgxBlock ngxBlockHttp = ngxConfig.findBlock("http");8 List serverList = ngxBlockHttp.findAll(NgxConfig.BLOCK,"server");9 for(NgxEntry ngxEntry : serverList) {10 NgxBlock ngxBlock =(NgxBlock) ngxEntry;11 NgxParam ngxParam = ngxBlock.findParam("server_name");12 if(host.equals(ngxParam.getValue())) {13 ngxBlockHttp.remove(ngxBlock);14 }15 }16 String content = newNgxDumper(ngxConfig).dump();17 log.info("{}", content);18 return true;19 } catch(IOException e) {20 log.warn("write nginx.conf to file catch IOException!", e);21 }22 return false;23 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql explain 为空_车祸现场!我的MySQL千万级数据表选错索引了!

最近在线上环境遇到了一次SQL慢查询引发的数据库故障,影响线上业务。经过排查后,确定原因是:SQL在执行时,MySQL优化器选择了错误的索引(不应该说是“错误”,而是选择了实际执行耗时更长的索引)。排查过程中&#xff0c…

Linux 命令之 head -- 在屏幕上显示指定文件的开头若干行/显示文件开头内容/查看文件开头内容

文章目录命令介绍常用选项参考示例(一)显示前 3 行文件内容(二)显示文件名信息,并显示文件前两行(三)显示文件前5个字符命令介绍 head 命令用于显示文件的开头的内容。在默认情况下&#xff0c…

java登录界面命令_Java命令行界面(第25部分):JCommando

java登录界面命令JCommando 网站 上将JCommando描述为“命令行参数的Java参数解析器”。 JCommando读取XML配置以生成一个Java类,该类处理Java应用程序中的解析。 在提供XML配置的 Java命令行解析库的本系列文章中,以前涵盖的唯一基于Java的库是JSAP &am…

数据追加用什么函数_RL用算法发现算法:DeepMind 数据驱动「价值函数」自我更新,14款Atari游戏完虐人类!...

【新智元导读】击败卡斯帕罗夫的「深蓝」并不是真正的人工智能,它过度依赖了人类设计的规则,而最近DeepMind的一项深度强化学习新研究表明,不用人工介入,完全数据驱动,算法自己就能发现算法。「深蓝」并非以智取胜&…

Linux 命令之 tail -- 在屏幕上显示指定文件的末尾若干行/显示文件尾部内容/查看文件尾部内容

文章目录一、命令介绍二、常用选项三、参考示例(一)显示文件 file 的最后 10 行(二)显示文件 file 的内容,从第 20 行至文件末尾(三)显示文件file的最后10个字符(四)显示…

python的循环语句机制_Python-for循环的内部机制

Python中,使用for循环可以迭代容器对象中的元素,这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。但是,为什么这些对象可以使用for循环进行操作呢?首先,定义一个简单的类尝试一下:cl…

迈克尔 杰克逊mv_用杰克逊流式传输大型JSON文件– RxJava常见问题解答

迈克尔 杰克逊mv在上一篇文章中,我们学习了如何解析过大的XML文件并将其转换为RxJava流。 这次让我们看一个大的JSON文件。 我们的示例将基于微小的colors.json,其中包含将近150种这种格式的记录: {"aliceblue": [240, 248, 255, …

@cacheable 是否缓存成功_缓存策略:如何使用缓存来减少磁盘IO?

现代的消息队列,都使用磁盘文件来存储消息。因为磁盘是一个持久化的存储,即使服务器掉电也不会丢失数据。绝大多数用于生产系统的服务器,都会使用多块儿磁盘组成磁盘阵列,这样不仅服务器掉电不会丢失数据,即使其中的一…

Linux 启动/停止/重启 SSH 进程,以及查看 SSH 进程状态的命令

请参考文章《Linux 启动/重启/关闭 MySQL 数据库的命令》

g++ 安装python_以后再也不用“教程”:让人举一反三的python配置环境过程 + 超简单原理概括!...

前言: 前一阵子至少指导了5位学弟学妹小伙伴配置 python 环境。两年前我入门 python 时,也得照着互联网上的资料,一步一步“照猫画虎”;为什么现在自己可以“凭感觉”一气呵成了呢?我想,原因必然是自己对于…

MacBook/MacOS/Mac OS 关于启动/停止/重启服务(进程/程序)的命令

文章目录使用命令 launchctl 停止某个进程使用命令 launchctl 启动某个进程使用命令 launchctl 查看某个进程是否启动使用命令 launchctl 停止某个进程 liaowenongdeair:bin root# sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist说明: .plist …

通过Java和Spring Boot应用程序将Gmail用作SMTP服务器

Gmail用户可以使用Gmail的SMTP服务器smtp.gmail.com从其Spring Boot应用程序发送电子邮件。 为此,让我们在应用程序中进行一些设置: 在application.properties文件中提供SMTP连接属性: spring.mail.hostsmtp.gmail.com spring.mail.username…

java面向对象类似atm的题_Java面向对象练习题之银行存取款

编写Java应用程序。首先定义一个描述银行账户的Blank类,包括成员变量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次,编写一个主类,在主类中测试Blank类的功能。String ZhangHao;double YuE;Blank(Str…

mongodb如何写入图片_CTO之瞳-数据库-MongoDB

MongoDB,常用的NoSql数据库,在https://db-engines.com/en/ranking 里被分类为文档型数据库。​本文从以下五个方面来了解MongoDB (和上一篇一样,基础操作请查询官方文档或者菜鸟教程)使用场景存储引擎性能测试索引-B树分片与复制1…

技术停滞_检测和测试停滞的流– RxJava常见问题解答

技术停滞假设您有一个流以不可预测的频率发布事件。 有时您可以预期每秒会有数十条消息,但是偶尔几秒钟都看不到任何事件。 如果您的流是通过Web套接字,SSE或任何其他网络协议传输的,则可能会出现问题。 静默时间过长(停顿&#x…

小波滤波器与其他滤波器的区别_滤波器国产 VS 国外

一、滤波器技术及产品类型详细分析几次技术应用的潮流引领了声波射频滤波器技术的发展,而SAW滤波器可以说是军用转民用的技术典范。早期国内的SAW滤波器仅用于国防如雷达、通信等方面需求;而该技术的第一次民用,即用于彩电产业,带…

java stopself_然后,即使我停止了服务,Context.startForegroundService()也没有调用Service.startForeground()...

所以我的应用程序有一些触发服务和通知的远程操作 . 在调用 startForegroundService 和服务尝试启动通知的时间之间,事情可能会发生变化,因此服务会再次检查事物的状态,然后决定要做什么 .因此,如果我的服务决定它不需要运行&…

Unix/Linux/BSD 它们之间的关系以及各自派系的介绍

文章目录一、Unix 是什么二、Unix 派系(一)BSD 分支1.BSD 是什么2.由 BSD 衍生的闭源 Unix 版本3.由 BSD 衍生的开源 Unix 版本(二)System V 分支1.System V 是什么2.System V 与 BSD 的版权纠纷,以及 UnixWare 的由来…

arraylist获取前多少位_Java 面试题 :百度前 200 页都在这里

作者:唐尤华,基本概念操作系统中 heap 和 stack 的区别什么是基于注解的切面实现什么是 对象/关系 映射集成模块什么是 Java 的反射机制什么是 ACIDBS与CS的联系与区别Cookie 和 Session的区别fail-fast 与 fail-safe 机制有什么区别get 和 post请求的区…

航空订票系统界面java_Java命令行界面(第21部分):航空公司2

航空订票系统界面java本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2的GitHub项目页面描述了该库,“ Airline是一个Java库,提供了基于注释的框架来解析命令行界面。” 该页面进入状态:航空公司“同时支持…