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 }
java conf_JAVA 解析、编辑nginx.conf详解相关推荐
- Nginx的配置文件nginx.conf详解
Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...
- nginx作为web服务以及nginx.conf详解
Nginx系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.nginx简介 nginx是一个优秀的web服务程序.反向代理程序.它采用非 ...
- Nginx配置文件nginx.conf详解
Nginx 总的 配置文件 位置 /usr/local/nginx/conf/nginx.conf nginx 正则匹配 一.正则表达式匹配,其中: 为区分大小写匹配 ~* 为不区分大小写匹配 ! 和 ...
- Nginx配置文件nginx.conf详解(转)
#定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;#全局错误日志定义类型,[ debug | in ...
- Nginx 配置文件 nginx.conf 详解
来源:北京流浪儿 www.cnblogs.com/gide/p/6180251.html #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心 ...
- Nginx 中 nginx.conf 详解
#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...
- 配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解)
配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解) 免费领取满减阿里云红包 项目名称:[域名解析–隐形URL转发]–centos 7.3 环境: 阿里云服务器之上有多个tomc ...
- java conf_JAVA 解析、编辑nginx.conf
最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf 解析nginx.conf过程可以参考该项目的README.md 下面举个列子说明一下该如何编辑nginx.conf. 定义一个po ...
- java json path_Java使用JSONPath解析JSON完整内容详解
JsonPath是一种简单的方法来提取给定JSON文档的部分内容. JsonPath有许多编程语言,如Javascript,Python和PHP,Java. JsonPath提供的json解析非常强大 ...
最新文章
- 设置IP安全策略将***阻杀在端口外
- Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)
- C1之路 | 训练任务03-WEB
- 游戏AI研究(三):路径规划
- 共筑全场景智慧生态,华为HMS全球应用创新大赛火热开启
- 【kafka】kafka单节点测试
- 设计一个媒体类,其中包含:书,CD及磁带3个子类。按照类的设计模式,完成他们的插入、删除和查找功能。
- 人脸对齐(十九)--Regressing a 3D Face Shape from a Single Image
- Msm8937+android7.1.1编译环境搭建及编译
- web前端开发面试题(三)
- 域名解析成功但ping不通解决方案
- 洛谷:P1330 封锁阳光大学(二分图染色 + 最小同色点覆盖)
- 模拟爬虫下载QQ空间相册高清图片
- python中空集怎么表示
- 这张图可以帮助解释为什么欧洲有些国家欢迎难民,有些国家拒绝难民【The Washington Post】
- 2021年疫情再度爆发,面对停课教培机构该如何应对?
- MySQL5.6 GTID
- 罗技LogitechFlow技术--惊艳的多电脑切换体验
- python找素数程序_求素数python
- 免费专利检索和下载网站(亲测超实用)
热门文章
- java ee的小程序_在Java EE应用程序中实现自动重试
- grpc 流式传输_编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中...
- null导入失败_当null检查非常失败时
- 程序员的前20个搜索和排序算法面试问题
- Java equals()和hashCode()
- web 项目集成福昕_项目学生:Web服务集成
- 使用Spring Security在Spring Boot中进行缓存
- Apache Derby数据库用户和权限
- java方法传对象参数_Java方法中的参数太多,第2部分:参数对象
- java中集合判空_Java中的类型安全的空集合